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