Java NIO2 AIO - Чат-сервер TCP

Я играю с Java NIO2, и я пытаюсь закодировать TCP Chat Server на основе AsynchronousServerSocketChannel.

Для программирования простого ECHO-сервера проблем не было и он работал без нареканий. Сейчас я пытаюсь принять много клиентов и передавать входящие сообщения всем подключенным клиентам, но я сталкиваюсь с проблемами.

Поскольку это стало немного длинным, я отправил код здесь в pastbin

До сих пор я могу передать одно сообщение, после чего что-то идет не так, и через некоторое время я получаю следующую ошибку:

Исключение в потоке "пул-1-нить-13" java.nio.channels.WritePendingException

1 ответ

Решение

Исключение в потоке "пул-1-нить-13" java.nio.channels.WritePendingException

Это означает, что вы пытались писать без ожидания завершения предыдущей записи. Когда вы вызываете write() с NIO2, вы получаете Future, на котором вы можете подождать, чтобы проверить, что оно закончилось.

Я бы не рекомендовал использовать NIO2, если у вас нет infiniband (именно для этого он и был разработан). NIO2 по меньшей мере вдвое сложнее в использовании, чем NIO, и я бы даже не предложил использовать NIO, если вы не используете простую блокировку NIO или библиотеку. как нетти или мина.

Для программы чата я бы просто использовал обычный NIO или даже IO. Или вы можете повторно использовать одну из множества библиотек чатов, которые уже существуют и работают.;)

Другие вопросы по тегам