1

我正在玩 Java NIO2,我正在尝试编写基于 AsynchronousServerSocketChannel 的 TCP 聊天服务器。

对一个简单的 ECHO-Server 进行编程是没有问题的,并且可以完美地工作。现在我正在尝试接受许多客户端并向所有连接的客户端广播传入消息,但我遇到了问题。

因为它有点长我把代码贴在了pastbin

到目前为止,我能够广播一条消息,之后出现问题,过了一会儿我收到以下错误:

线程“pool-1-thread-13”中的异常 java.nio.channels.WritePendingException

4

1 回答 1

3

线程“pool-1-thread-13”中的异常 java.nio.channels.WritePendingException

这意味着您尝试在不等待前一次写入完成的情况下进行写入。当你用 NIO2 调用 write() 时,你会得到一个 Future,你可以等待它检查它是否已经完成。

我不建议使用 NIO2,除非你有 infiniband(这是它的设计目的) NIO2 至少是 NIO 的两倍,除非你使用简单的阻塞 NIO 或库,否则我什至不建议使用 NIO像netty或mina。

对于聊天程序,我只会使用普通的 NIO 甚至 IO。或者,您可以重新使用已经存在并且可以使用的众多聊天库之一。;)

于 2013-01-03T15:52:14.190 回答