我正在研究多人游戏中服务器和客户端通信的结构。我得出结论,由于UDP使用“射击并忘记”的方式,不会阻塞应用程序,因此UDP是最好的选择。我还将使用TCP发送需要可靠性的数据包,例如在登录过程中和信息交换(如更改服务器、更改地图、更新等)期间。它还将运行基于IRC的聊天室(所有命令实际上都是IRC风格的自定义消息)。
我想知道在服务器和客户端之间发送交互消息(移动、咒语、物品、动作等)的最佳方法是什么。
通过阅读一些文档,我了解到MulticastSocket。
我的问题是:
是向所有客户端发送持续的信息流更好,为每个玩家启动一个线程(就像在TCP通信中所做的那样),其中每个DatagramSockets将侦听队列并将每条新消息发送到其客户端。这意味着所有地图和所有移动(假设可以有50个玩家遍布全地图)将发送给所有玩家,并且每个数据包必须更大才能包含所有这些信息。 还是更好地为每个地图使用一个线程,仅在某些玩家位于该特定地图内时才激活,使用组播通信,仅向位于该地图内的玩家发送消息,并使用MulticastSocket侦听。
我了解到使用组播存在防火墙或路由器问题,但我无法想象这些问题可能会有什么不同(与普通UDP不同)。
应用程序应该可以被任何人使用,而且配置问题很少。
我想知道在服务器和客户端之间发送交互消息(移动、咒语、物品、动作等)的最佳方法是什么。
通过阅读一些文档,我了解到MulticastSocket。
我的问题是:
是向所有客户端发送持续的信息流更好,为每个玩家启动一个线程(就像在TCP通信中所做的那样),其中每个DatagramSockets将侦听队列并将每条新消息发送到其客户端。这意味着所有地图和所有移动(假设可以有50个玩家遍布全地图)将发送给所有玩家,并且每个数据包必须更大才能包含所有这些信息。 还是更好地为每个地图使用一个线程,仅在某些玩家位于该特定地图内时才激活,使用组播通信,仅向位于该地图内的玩家发送消息,并使用MulticastSocket侦听。
我了解到使用组播存在防火墙或路由器问题,但我无法想象这些问题可能会有什么不同(与普通UDP不同)。
应用程序应该可以被任何人使用,而且配置问题很少。