#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(), если он находится в неблокирующем режиме, может не записать все сразу. Также может быть записано только некоторые части сообщения (вместо ничего или всего сообщения).