Сообщение, потерянное на длинном пути доставки с использованием java nio

#java #message #nio

#java #Сообщение #nio

Вопрос:

В моем проекте последовательность сообщений пересылается из пункта A в пункт B… для K. Путь доставки составляет 11 узлов. Сокет — java nio. Проблема в том, что некоторые сообщения потеряны и не получены на последнем узле. В чем причина этого исключения? Спасибо.


Я использую TCP и использую только библиотеку Java nio. Исключение: например, на начальном узле опубликовано 2999 сообщений. На конечном узле получено 2995 сообщений. Несколько сообщений потеряны на пути доставки.

Если я отправляю сообщение очень быстро, например, интервал времени составляет 50 мс, количество сообщений о потерях увеличивается.

Как устранить эту проблему?

Спасибо.

Комментарии:

1. Вам необходимо предоставить больше информации. Вы используете потоки (TCP) или дейтаграммы (UDP)? Вы используете какую-то стороннюю платформу обмена сообщениями или внедрили свою собственную? Какое исключение вы получаете? Знаете ли вы, на каком «переходе» сообщения теряются?

Ответ №1:

Я решаю эту проблему, проверяя количество записанных байтов. Если записано 0 байт, я перепишу его снова. Процесс записи завершается, когда в байтовом буфере не остается байтов.

Комментарии:

1. Да, важно отметить, что SocketChannel.write(), если он находится в неблокирующем режиме, может не записать все сразу. Также может быть записано только некоторые части сообщения (вместо ничего или всего сообщения).