Нахождение узкого места в TCP-соединении - PullRequest
0 голосов
/ 08 мая 2018

Я работаю над проектом, в котором есть один издатель и один подписчик, подключенные через обычное сокетное соединение TCP. Издатель генерирует сообщения с определенной скоростью, отправляет их через сокет, затем подписчик обрабатывает сообщения. Нет очереди сообщений, только чистое соединение через сокет TCP.

Проблема заключается в том, что метод «записи» сокета в издателе, по-видимому, занимает много времени при вызове, и это снижает скорость, с которой издатель может отправлять данные.

Я немного читал о сокетах и ​​могу вспомнить два сценария, которые могут вызвать это:

  1. Сеть не достаточно быстра для обработки скорости отправки сообщений. В этом случае я думаю, что исходящий буфер сокета на издателе должен быть заполнен.

  2. Потребитель медленно обрабатывает сообщения, и, следовательно, я ожидаю, что входящий буфер потребителя будет заполнен. Это (как я понимаю) приведет к блокировке метода записи в сокет.

Я все еще изучаю программирование сокетов и не уверен, имеет ли смысл приведенный выше анализ. Если так, что может быть хорошим способом определить, какой это сценарий? Следует отметить, что потребитель находится на компьютере с Linux, а издатель - на компьютере с Windows. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете измерить, сколько времени приемник проводит в методе read() или recv(), или в любом другом месте, которое он вызывает для чтения из сети.

Если это очень мало, всегда сохраняются данные, так что ошибкой чтения является ошибка получателя.

Если время, заблокированное при чтении, является значительным, то это ошибка сети за медленную работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...