Отправка tcp-пакетов в PHP-лимит - PullRequest
0 голосов
/ 31 января 2012

я пытаюсь отправить большой пакет (9170 байт) с помощью fwrite на tcp-сервер

            fwrite($this->_socket, $data);

Проблема в том, что сначала отправляется 8192, затем отправляются левые 978 байт, и я хочу уменьшить количество отправляемыхС 8192 по 1444 за каждый раз, когда оно отправлено

Ответы [ 4 ]

1 голос
/ 01 февраля 2012

Слой TCP сделает это, вам не нужно. Если вы записываете 9 880 байтов, а сервер пытается прочитать только 1444 из них, он получит первые 1444 байта. В следующий раз, когда сервер попытается прочитать, он получит следующий байт или байты.

Клиенту не нужно организовывать свои передачи, чтобы соответствовать требованиям приема сервера. Контроль потока на уровне TCP будет обрабатывать это автоматически.

Вы решаете не проблему.

0 голосов
/ 31 января 2012

$ данные - это строка, верно? Вы можете разделить с помощью substr (), а затем просто продолжить отправку.

0 голосов
/ 31 января 2012

В этом случае просто отправьте 1444 байта и дождитесь сообщения подтверждения на уровне пользователя от сервера. Это создаст впечатление отправки 1444 байта за раз. Это также будет мучительно медленно.

Основная проблема в том, что TCP не может отправлять сообщения длиннее одного байта - он передает байты.

Добавить протокол поверх TCP, который может отправлять сообщения.

0 голосов
/ 31 января 2012

Согласно документации fwrite необязательным третьим параметром fwrite является длина.Это означает максимальное количество байтов, которое будет отправлено до достижения конца строки.Не будет ли это решением вашей проблемы?

См. Примеры в комментариях под документацией, они содержат примеры использования fwrite with length.

...