【发布时间】:2015-04-02 00:08:25
【问题描述】:
我目前正在为一个快节奏的多人游戏编写服务器,它应该在 UDP 中运行 (我读到 TCP 不合适,因为它处理丢包的方式,在需要及时传递数据的应用程序中,请纠正我如果 TCP 更有用) 该游戏不是大型多人游戏,应该主要由玩家自己托管,可能在本地专用服务器上。虽然我很确定客户端需要在 NIO 中,以避免网络问题导致游戏延迟,但我还不知道如何编写服务器。以下是我考虑过的可能性列表:
- 为每个播放器使用单独的线程,每个播放器都绑定一个套接字
- 使用单个套接字循环遍历每个播放器
- 做同样的事情,但使用 NIO
- 使用一个套接字同时向所有客户端广播消息
- 使用一个套接字接收,一个在单独的线程上发送
在处理客户数量相对较少的时间关键型数据时,哪一种方法最合适?(不超过 16 个)
【问题讨论】:
-
有多少客户是“低数量”?
-
@Malt 我现在工作的前提是 16 岁以上。
-
我可以问一下那个否决票吗?我已尝试投入尽可能多的研究工作,但我看不出哪里失败了。
-
您对 TCP 处理丢包的方式到底有什么问题? NB 多播与广播不同,多播套接字用于接收多播:您不需要多播套接字来发送。
-
@EJP 在丢弃的数据包到达之前,不会收到更多数据包,如果数据在几毫秒内过时,这会适得其反。假设一个带有船位的理论数据包被丢弃,你最好收到下一个并继续前进,而不是等待旧的。
标签: java multithreading sockets udp server