我正在研究我的多人游戏中服务器 - 客户端通信的结构。MulticastSocket多人游戏
我得出的结论是,UDP是最好的选择,因为使用它的方式“不会丢失”,如果数据包丢失,它不会阻止应用程序。 我还将使用TCP发送需要数据包的可靠性,例如在登录过程和交换信息(如更改服务器,更改地图,更新等)期间的信息。它还将运行基于IRC的聊天。 (所有的命令实际上都是IRC风格的自定义消息)。
我想知道在服务器和客户端之间发送交互消息(移动,法术,对象,动作等)的最佳方式是什么。
阅读一些我来到MulticastSocket的文档。
我的问题是:
最好是连续的信息流发送给所有的客户端启动一个线程为每个玩家(我在TCP通讯办),其中每个DatagramSockets会听到一个队列发送的每个新消息给它的客户。这意味着所有的地图和所有的移动(假设地图上可能有50名玩家)将被发送给所有玩家,并且每个数据包必须更大才能包含所有这些信息。 或者更好地为每个地图使用一个线程,只有当某个玩家在特定地图内时使用多播通信,才会向该地图内的玩家发送消息,并使用MulticastSocket侦听。
我读了防火墙或路由器使用多播的问题,但我无法弄清楚这些问题可能是什么(与普通的UDP不同)。
应用程序应该由配置问题少的人使用。
某些路由器被配置为阻止多播数据包,因为它们可能会导致网络上的不期望的业务。试想一下,恶意用户通过网络发送虚拟组播数据包,并使用通配符地址。数据包的范围也很重要。与较小的网络(如专用LAN)相比,如果数据包位于较大的网络(例如,互联网)上,数据包就不太可能到达。至于这是否可以避免(仍然使用多播),我不能给你一个很好的答案。 – initramfs
我不与组播贴,其实这个问题是关于什么是创建通信服务器客户UDP的最佳方式,我可以没有问题更改。 也许我可以创建一个模拟多播套接字的类,一次向多个客户端发送相同的数据包?但我不知道它是否会足够快。感谢您的评论 – Gianmarco
我更关心带宽而非速度。与传统的每个连接需要数据包的网络结构相比,多播数据包只发送一次。如果有50个玩家在服务器中,与单个连接的用户相比,您必须考虑50倍的带宽。我只是提供了关于多播包的见解。 – initramfs