tcp / ip связь отправитель получатель проблема с различной скоростью процесса - PullRequest
0 голосов
/ 12 марта 2010

В моей программе получатель имеет большую рабочую нагрузку. Должен ли я заставить отправителя ждать получателя с помощью таких методов, как ACK прикладного уровня?

1 Ответ

1 голос
/ 12 марта 2010

Вы не должны напрямую отправлять сообщения TCP ACK - они обрабатываются ОС на низком уровне. Я бы посмотрел на следующее в порядке вероятности:

  • Есть ли какая-нибудь простая оптимизация на приемнике? Довольно редко вы действительно можете заполнить сетевой канал быстрее, чем получатель может обработать данные. Убедитесь, что у получателя есть как минимум два потока: поток сетевого ввода-вывода и рабочий поток.
  • Если получатель начинает паниковать, он может отправить на сервер сообщение о дроссельной заслонке, что заставляет сервер остыть, пока приемник не догонит его. Это более эффективно, чем ожидание подтверждения сообщения после каждого сообщения, но для этого требуется, чтобы получатель знал, когда отстает приблизительно , что может быть затруднительно.
  • С другой стороны, самая медленная, но самая надежная вещь - это заставить получателя подтверждать каждое сообщение с сервера, как вы упомянули. Это будет не TCP ACK, а специальное сообщение в формате данных, которое ваш отправитель / получатель использует для связи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...