N * (подключить + отправить + закрыть) vs (Nagle отключить + подключить + N * send + close), N> 1

Я новичок в программировании сокетов (как вы уже поняли из моего глупого вопроса), но, не обращая внимания на мой стыд, я пишу программу с использованием TCP posix. Мое ограничение заключается в следующем: сообщение, которое должно быть отправлено от клиента на сервер, должно читаться как поток байтов, и, хотя мое приложение не имеет высокой производительности, сообщение должно быть доставлено как можно скорее. Я написал класс клиента TCP с намерением сделать следующее: 1 соединение - много отправлений - и 1 закрытие в конце потоковой передачи. Проблема в том, что сообщения не доставляются почти в реальном времени (я предполагаю, что он ждет, чтобы получить более крупный пакет для лучшего Пропускная способность) Проведя некоторое исследование в Интернете, я обнаружил, что, хотя вы можете отключить алгоритм Нэгла (NA), это очень плохая идея. Поскольку я новичок в программировании сокетов, я не хочу отключать функции, которые я не совсем понимаю. Итак, у меня осталось два (плохих?) Варианта:

  1. подключиться - отправить - закрыть на сообщение
  2. 1 подключение - отправить несколько раз и сделать 1 закрытие в конце с отключенным NA. Пока я читал о последствиях отключения NA, мне кажется, что открытие и закрытие сокета каждый раз просто для отправки сообщения - тоже дорогая цена.

Существуют ли другие решения, не оставляющие сокеты?

Спасибо.

14
задан Armando 3 June 2011 в 02:06
поделиться