我正在研究多人游戏中服务器-客户端通信的结构。
我得出的结论是 UDP 是最好的选择,因为它采用“一劳永逸”的使用方式,即使丢包也不会阻塞应用程序。我还将使用 TCP 发送需要可靠性的数据包,例如在登录过程和交换服务器更改、地图更改、更新等信息的过程中。它还将运行基于 IRC 的聊天。(所有命令实际上都是 IRC 样式的自定义消息)。
我想知道在服务器和客户端之间发送交互消息(移动、咒语、对象、动作等)的最佳方式是什么。
阅读了一些文档,我来到了 MulticastSocket。
我的问题是:
最好将连续的信息流发送到为每个播放器启动一个线程的所有客户端(就像我在 TCP 通信中所做的那样),其中每个 DatagramSockets 将侦听一个队列,将每个新消息发送到其客户端。这意味着所有地图和所有动作(假设地图上可能有 50 名玩家)将发送给所有玩家,并且每个数据包必须更大以包含所有这些信息。或者最好为每个地图使用一个线程,仅当某些玩家在该特定地图内时才处于活动状态,使用多播通信,仅向该地图内的玩家发送消息,并使用 MulticastSocket 进行侦听。
我阅读了有关使用多播的防火墙或路由器的问题,但我无法弄清楚这些问题可能是什么(不同于普通的 UDP)。
该应用程序应该由几乎没有配置问题的任何人使用。