Сохраняют ли сообщения, отправленные через Netty's Channel.write (), свой порядок при отправке в сеть? - PullRequest
2 голосов
/ 31 января 2012

Я делаю какое-то шифрование, которое зависит от порядка сообщений, отправляемых по каналу Netty. Я ожидаю, что если я напишу сообщение A перед сообщением B в канал, то они должны быть отправлены на удаленный сокет в том же порядке, в котором я записал их в канал. Так что, дело, которое мне нужно, уже поддерживается Netty?

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

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

Да, сообщения будут передаваться в том же порядке, в котором вы вызываете Channel.write (..). Здесь не о чем беспокоиться.

1 голос
/ 27 октября 2018

Ответ получен из этого вопроса . (Спасибо Scottmitch@github).

Netty может обеспечить «заказ» в следующих ситуациях:

  1. Вы делаете все записи из потока EventLoop; ИЛИ
  2. Вы не делаете записи из потока EventLoop (т.е. все записи выполняются в другом потоке (ах)).

Это тонкая, но важная вещь, которую нужно запомнить, поскольку она может вызвать болезненные ошибки. Если некоторые channel.write() вызовы поступают из потоков приложения, а некоторые из EventLoop, то записи могут показаться не в порядке с точки зрения приложения. См. Больше деталей по связанной проблеме.

Этот вопрос, похоже, является лучшим результатом поиска для порядка записи в Netty, поэтому хотел убедиться, что в нем упоминается это важное предупреждение.

...