Что быстрее отправка нескольких маленьких сообщений или меньше сообщений с TCP-сокетами - PullRequest
2 голосов
/ 11 марта 2012

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

например, если бы у меня было 300 устройств, получающих сообщения с одного сервера, было бы лучше отослать одно большое сообщение и заставить устройства выбирать нужные им части или отправлять 300 сообщений, но на 1/300 отразмер.Они будут только маленькими укусами, поэтому 300 девайсов будут получать только 6 байт каждый

Имеет ли это значение?

Спасибо заранее.

1 Ответ

1 голос
/ 11 марта 2012

Если алгоритм сокета Nagle включен, то отправка нескольких меньших сообщений по данному соединению обычно будет медленнее, чем отправка меньшего количества больших сообщений по тому же соединению. Nagle внутренне буферизует исходящие данные и должен ждать достаточного количества данных для буферизации и / или тайм-аута, чтобы он мог отправлять эффективные сообщения. Для общего использования сокетов обычно предпочтительнее включить Nagle, поскольку он предлагает хороший баланс между скоростью, производительностью и накладными расходами, который приемлем для большинства приложений. Но если вам нужно отправлять чувствительные ко времени сообщения, вам обычно нужно отключить Nagle, чтобы каждое сообщение передавалось индивидуально как можно скорее.

То, что вы описываете при отправке одного сообщения нескольким устройствам, невозможно при использовании TCP. Предположительно, каждое из устройств имеет свое собственное TCP-соединение напрямую с сервером. Чтобы отправить одно сообщение всем 300 соединениям, вам нужно будет сделать 300 независимых копий сообщения, по одной на каждое соединение. TCP не имеет широковещательных возможностей (переключитесь на UDP или Multicasting, если вам это нужно). Единственный способ отправить одно серверное сообщение и ответить на него 300 устройствам - это если устройства не подключаются к серверу напрямую, а вместо этого обмениваются данными через прокси-сервер, который поддерживает единственное соединение с сервером и пересылает полученные серверные сообщения каждому устройство по мере необходимости.

...