繁体   English   中英

用Java管理套接字连接

[英]Socket connections managing in Java

我正在用Java开发一个简单的多人游戏。 关键是,我需要服务器应用程序才能从多个客户端应用程序接收数据。 示例:我连接了2个客户端应用程序。 服务器正在等待来自任何客户端的数据。 使用第一个客户端应用程序移动游戏角色时,必须将具有新坐标的数据发送到服务器应用程序,然后必须将角色的新位置广播给所有客户端。 我读过,可以通过为每个客户端连接创建一个新线程来完成此操作,但是有更好的方法吗? 如果启动例如100个线程,服务器不会崩溃吗?

感谢您的所有答复,氰化物

您应该使用套接字池来管理套接字。 一个快速的谷歌带我到这个例子,但你可以找到更多。 如果您需要处理100个以上的线程,那么这可能不再是一个简单的多人游戏,您应该将其用作第一个项目。

您无需创建新线程即可处理新的客户端连接。 您可以根据需要创建,但是根本不需要。

请在下面找到您可以遵循的方法。

拥有一台具有以下功能的服务器:1)一个线程可以接受新连接,创建会话并在现有游戏中添加新玩家。 因此,您可以将其称为管理线程。

2)一个线程将仅在套接字fds上使用epoll / select。 任何套接字上的任何读写都会在该线程上得到通知。

3)有N个(取决于许多因素,尤其是服务器的核心),可以说5个工作线程(线程池),其工作是在游戏会话的所有套接字上广播数据,但起源的线程除外请求。

因此,当您在任何套接字上接收到任何数据时,都会在线程2(epoll线程)上收到通知,然后您将要求其中一个工作线程将数据广播到所有相关的套接字

需要注意的重要一点是,您必须等待多少次工作线程才能将工作推到工作线程上。 这需要根据用例进行调整。

只是添加一些东西:

因此,现在您将如何扩展此解决方案。 这将取决于游戏会话的数量,您可以拥有负载平衡器,该负载平衡器将始终在使用最少资源的计算机上启动新游戏。

如果您在Linux上执行此操作,则有限制配置以限制套接字连接/ proc / sys / net的数量,该数目控制如何打开tcp / ip套接字,并且只要套接字连接数低于该值,就应该没事的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM