Реализация vert.x sockJS задерживает отправку сообщений

Мы используем реализацию sockJS vert.x для нашего решения для веб-сокетов. Когда vert.x отправляет несколько сообщений быстро друг за другом, некоторые сообщения будут доставлены клиенту очень поздно. Поздние сообщения поступают только после отправки контрольного сигнала. Есть идеи, как это возможно?

Мы временно исправили это, поместив наш метод sockjssocket.write () внутрь синхронизированного блока, но это немного похоже на взлом. Причина, по которой мы помещаем это в синхронизированный блок, заключается в том, что мы думаем, что это как-то связано с параллельной записью в буфер сокета.

с уважением,

Даан


person Daan Poron    schedule 10.01.2014    source источник


Ответы (1)


WebSockets - это уровень протокола, реализованный поверх TCP.

TCP имеет некоторые механизмы для оптимизации производительности сети и обеспечения надежной и упорядоченной доставки фрагментов потока. Одной из таких "оптимизаций" является алгоритм Нэгла, он ставит в очередь небольшие блоки на сетевом уровне, прежде чем они удовлетворяют размеру отправляемого пакета и отправляют только тогда, когда он достаточно большой.

Что потенциально происходит из-за того, что этот алгоритм не отключен в vert.x. Похоже, this указывает на фактическую настройку, которую вы можете использовать, чтобы отключить ее.

Если это не поможет, вам нужно убедиться, что библиотека SockJS не «воссоздает» ту же механику в целях «оптимизации».

Цель этого алгоритма - объединить более мелкие фрагменты и отправить их в виде одного пакета, уменьшив накладные расходы базовой сети, несущие заголовок TCP для каждого фрагмента. Если вы отправляете много маленьких, убедитесь, что вы оптимизировали его (объедините себя), так как лучше отправлять большие куски.

person moka    schedule 06.03.2014
comment
Ссылка "эта" больше не работает. Не могли бы вы обновить свой ответ? - person Manu K Mohan; 22.03.2016
comment
vertx.io похоже изменил URL-адреса, обновил. Кстати, вы можете обновить себя. - person moka; 29.03.2016