Соединения и управление потоком
TcpConnection представляет одно TCP-соединение. HTTP, Text и WebSocket используют этот транспорт с разными codec. AsyncTcpConnection создаёт исходящее соединение.
Отправка и завершение
Заголовок раздела «Отправка и завершение»send($data, $raw = false): ?bool сначала вызывает protocol encode, если raw=false. true означает успешную передачу в локальный send path, а не подтверждение обработки удалённым приложением. false сообщает об ошибке/закрытом соединении; null означает постановку данных в буфер либо пустой результат codec. Данные могут оставаться в буфере до завершения TCP/TLS establishment или освобождения socket.
close($data = null, $raw = false) отправляет остаток и закрывает соединение после буфера. end() завершает запись с учётом linger/half-close. destroy() освобождает socket немедленно. Во время файловой HTTP-отправки close/end откладываются через stream lifecycle.
Backpressure
Заголовок раздела «Backpressure»getSendBufferQueueSize(), getRecvBufferQueueSize(), bufferIsEmpty() показывают очереди. maxSendBufferSize и maxPackageSize задают ограничения конкретного соединения; статические default-параметры применяются при его создании.
На onBufferFull остановите производство данных; на onBufferDrain продолжите. pauseRecv()/resumeRecv() управляют чтением. Не повторяйте send в бесконечном цикле при полном буфере.
$source->pipe($destination) назначает onMessage/onClose у source и onBufferFull/onBufferDrain у destination. Эти назначения заменяют прежние callbacks. Для двустороннего relay связывают оба направления; авторизация и разрешённые адреса относятся к приложению.
Исходящее соединение
Заголовок раздела «Исходящее соединение»new AsyncTcpConnection($remoteAddress, $socketContext = [], $eventLoop = null) создаёт объект; connect() начинает подключение. setConnectTimeout($seconds) ограничивает establishment. reconnect($after) планирует повторное подключение, cancelReconnect() отменяет его. Закройте прежние таймеры/подписки перед повторной регистрацией логики.
setIdleTimeout(), setFrameTimeout(), setTlsHandshakeTimeout() ограничивают соответствующие этапы TcpConnection. Для прикладного запроса дополнительно задайте его собственный deadline: активное соединение может никогда не прислать нужный ответ.