从我对Java NIO和非阻塞[Server] SocketChannels的了解中,应该可以编写一个仅使用一个线程即可维持多个连接的TCP服务器-我将创建一个Selector来等待服务器循环中的所有相关通道。
是这样吗,还是我错过了一些重要的细节?我会遇到什么问题?
(背景:TCP通信将用于小型多人游戏,因此最多可同时建立10-20个连接。消息大约每几秒钟发送一次。)
是的,你是对的。您可能会遇到的问题是处理时间过长。在这种情况下,您必须将处理过程包装在另一个线程中,以免干扰网络线程,并防止明显的延迟。
另一个细节;通道都是关于“移动”数据的。如果您希望发送的数据已准备就绪,则可以将该数据移至网络通道。复制/缓冲/等 然后全部由NIO实现完成。
您的单线程“网络线程”仅在控制连接,而不是在限制连接(请参阅:与汽车怪异的比喻)。
基本的多线程方法比单线程NIO更易于设计和实现。在小型多人游戏服务器/客户端中,性能提升并不明显,特别是如果消息仅每隔几秒钟发送一次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句