SocketIO — API
SocketIO
Заголовок раздела «SocketIO»new SocketIO($port = null, $opts = []) создаёт корневой namespace, выбирает Nsp/Socket/Adapter и при заданном port открывает listener на всех IPv4-интерфейсах.
| Метод | Назначение |
|---|---|
of($name, $callback = null) | Получить/создать namespace; callback регистрируется на connect. |
attach($server, $opts = []) | Подключить Engine к существующему Server. |
bind($engine) | Привязать существующий Engine. |
nsp($class = null), socket($class = null) | Прочитать/задать класс соответствующего объекта. |
adapter($class = null) | Прочитать/сменить adapter; namespaces переинициализируют его. |
origins($policy = null) | Прочитать/задать origin policy и передать Engine. |
on, emit, to, in, send, write | Делегирование корневому namespace. |
Constructor options nsp/socket/adapter/origins обрабатывает SocketIO; прочие идут в Server constructor при создании listener. attach() создаёт new Engine() без передачи всего opts в Engine constructor, поэтому произвольный Engine option не применяется автоматически.
Nsp хранит sockets/connected и adapter. on('connection', ...)/on('connect', ...) — lifecycle. Другой emit($event, ...$data) формирует packet для клиентов. to/in($room) задают фильтр; send/write — событие message.
Вызов hook сам по себе не проверяет права. Для middleware и дополнительных extension points сначала проверьте фактический вызывающий путь выбранной версии Nsp.
| API | Поведение |
|---|---|
on($event, $listener) | Подписка через emitter. |
emit($event, ...$args) | Отправка клиенту; последний callable — индивидуальный ACK. |
join($room) | Добавление только подключённого socket. |
leave($room), leaveAll() | Удаление membership. |
to/in($room) | Socket broadcast в rooms без отправителя. |
send/write(...$args) | Событие message. |
disconnect(bool $close = false) | Namespace либо целый client transport. |
compress($value) | Флаг следующей отправки; фактическая поддержка зависит от transport. |
Handshake возвращает headers, time, address, xdomain, secure, issued, url и query. Методы onconnect/onpacket/onevent/onack/onclose обслуживают внутренний lifecycle; не вызывайте их для обхода handshake.
Adapters
Заголовок раздела «Adapters»DefaultAdapter хранит sids/rooms, управляет membership и рассылает packet выбранным socket IDs. ChannelAdapter пересылает события через общий канал и помечает сообщения собственным ID для фильтрации собственных повторов.
Persistent history, application ack, exactly-once effect и восстановление rooms после перезапуска adapter не предоставляет. Внешний emitter не заменяет долговечную job queue.
Engine и packets
Заголовок раздела «Engine и packets»Transport names: polling и websocket. Defaults Engine: pingInterval 25, pingTimeout 60, upgradeTimeout 5; handshake переводит значения в wire-format. Не подставляйте миллисекунды из другого API без сверки.
Engine packets: open, close, ping, pong, message, upgrade, noop. Внутри message находятся Socket.IO connect/disconnect/event/ack/error/binary-event/binary-ack. Совместимость binary-формата и heartbeat проверяется реальным client/server обменом, не успешным разбором одного WebSocket frame.
Transport/RFC6455 parser не валидирует бизнес-содержимое пользовательского event. Ограничивайте размер, частоту и разрешённые события на прикладной границе.