Java套接字:我可以用一个线程编写一个TCP服务器吗?

hmp:

从我对Java NIO和非阻塞[Server] SocketChannels的了解中,应该可以编写一个仅使用一个线程即可维持多个连接的TCP服务器-我将创建一个Selector来等待服务器循环中的所有相关通道。

是这样吗,还是我错过了一些重要的细节?我会遇到什么问题?

(背景:TCP通信将用于小型多人游戏,因此最多可同时建立10-20个连接。消息大约每几秒钟发送一次。)

Pindatjuh:

是的,你是对的。您可能会遇到的问题是处理时间过长。在这种情况下,您必须将处理过程包装在另一个线程中,以免干扰网络线程,并防止明显的延迟。

另一个细节;通道都是关于“移动”数据的。如果您希望发送的数据已准备就绪,则可以将该数据移至网络通道。复制/缓冲/等 然后全部由NIO实现完成。
您的单线程“网络线程”仅在控制连接,而不是在限制连接(请参阅:与汽车怪异的比喻)。

基本的多线程方法比单线程NIO更易于设计和实现。在小型多人游戏服务器/客户端中,性能提升并不明显,特别是如果消息仅每隔几秒钟发送一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以用此代码编写一个可变大小的数组吗?

Java套接字:您可以从一个线程发送而在另一个线程接收吗?

Rust TCP套接字服务器仅使用一个连接

创建一个新的TCP套接字-服务器端

创建一个套接字服务器,它允许通过线程和Java进行多个连接

创建一个使用线程池来自客户端的消息等待一个Java服务器套接字

我可以用一个以上的参数映射一个函数吗?

创建一个能够每秒处理数千个请求的 TCP 套接字服务器

我可以用Java做一个抽象的枚举吗?

您可以从正在运行的 TCP 服务器中启动一个新的 TCP 服务器吗?

TCP:两个不同的套接字可以共享一个端口吗?

在另一个线程中在python3中运行的非阻塞套接字服务器

Spring Integration TCP客户端上的多个套接字连接到一个服务器地址

TCP 套接字客户端和服务器在一个程序中使用 c Linux

是否可以在另一个网络中寻址服务器/客户端套接字?(C ++)

我可以用一个窗口用bash打开另一个窗口并用鱼打开终结器吗?

我可以给ng-form一个可以用$ pristine检查的名称吗?

我可以安装一个简单的邮件服务器吗?

我可以为 Windows 制作一个 DIY 云服务器吗?

Kotlin:我可以用另一个函数覆盖一个函数吗?(如覆盖)

一个简单的客户端服务器套接字程序的PrintWriter和OutputStream

异步服务器套接字缺少第一个缓冲区流

我们可以将一个厨师服务器.pem替换为另一个厨师服务器.pem吗?

我们可以编写一个可以在全球范围内触发服务器请求的测试应用程序吗?

我可以用一个模块实现多种模块类型吗?

我可以用另一个分支的提交替换旧的提交吗?

写一个python脚本,我可以用随机模块做这个吗?

我可以用一个设备创建软件RAID 1吗?

我可以用另一个查询结果更改数组的值吗