API: TcpConnection

localzet\Server\Connection\TcpConnection представляет accepted TCP client connection. Встроенные HTTP и WebSocket protocol передают через onMessage уже декодированное сообщение; пользовательское приложение не должно самостоятельно трактовать границы read().

Передача и завершение

  • send(mixed $data, bool $raw = false): bool|null кодирует сообщение текущим protocol, если raw не задан; результат может сообщать, что данные буферизованы или соединение недоступно — обрабатывайте контракт метода.
  • close(mixed $data = null, bool $raw = false): void инициирует protocol-aware close, где он поддержан.
  • end(mixed $data = null, bool $raw = false): void завершает отправку и закрывает соединение после flush.
  • destroy(): void освобождает транспорт немедленно; обычно предпочитайте lifecycle методы.

Для WebSocket завершения используйте его close semantics, а не произвольный TCP payload.

Буферы и чтение

getSendBufferQueueSize() и getRecvBufferQueueSize() дают диагностические размеры очередей. pauseRecv()/resumeRecv() управляют приёмом, pipe() передаёт данные между соединениями с backpressure. maxSendBufferSize, maxPackageSize и lingerTimeout задают per-connection пределы/поведение.

События onBufferFull и onBufferDrain позволяют приложению замедлить producer-а и продолжить после освобождения очереди. Не накапливайте неограниченный пользовательский буфер поверх send queue.

Адреса и состояние

Используйте getRemoteIp(), getRemotePort(), getRemoteAddress(), getLocalIp(), getLocalPort() и getLocalAddress(). getStatus() возвращает состояние соединения. setIdleTimeout() и setFrameTimeout() меняют таймауты текущего соединения.

context — прикладное хранилище состояния соединения. Оно принадлежит текущему worker и не разделяется с другими процессами. Удаляйте из него ссылки на крупные ресурсы при закрытии.

Callback-и соединения

На instance можно задать onMessage, onClose, onError, onBufferFull и onBufferDrain. WebSocket connection дополнительно имеет callbacks handshake, ping/pong и close. Проверяйте типы и сигнатуры в исходном TcpConnection.php/ConnectionInterface.php; эти классы — актуальный контракт текущей версии 7.x.

Асинхронный клиент

AsyncTcpConnection создаёт исходящее TCP/TLS/WebSocket соединение через event loop, поддерживает connect timeout и явный reconnect. Обработайте onConnect, onMessage, onClose и onError; отменяйте reconnect и освобождайте соединение при shutdown. Прокси SOCKS5/HTTP требует отдельной конфигурации и проверки доверия к proxy.