Networking 使用ZeroMQ(或其他消息队列)在实时移动游戏中实现联网是一个好主意吗?

Networking 使用ZeroMQ(或其他消息队列)在实时移动游戏中实现联网是一个好主意吗?,networking,udp,message-queue,zeromq,Networking,Udp,Message Queue,Zeromq,我将为Android和iOS实现一个移动游戏,在这个游戏中,每个玩家的动作都需要通过一个服务器广播给游戏中附近的其他玩家,该服务器会检查这些动作是否被允许。要求是需要尽快通知其他玩家这些行动。操作不需要按照发送的顺序进行交付,但是交付应该是可靠的 我正在考虑使用ZeroMQ来实现这一点。附近的玩家可以订阅同一主题,并发布/使用包含其他玩家动作的消息。与使用某种RPC实现通信相比,使用消息队列似乎非常有吸引力。不过,我有以下疑问: ZeroMQ能否在一个不太稳定的蜂窝网络上正常工作 可信赖的 Ze

我将为Android和iOS实现一个移动游戏,在这个游戏中,每个玩家的动作都需要通过一个服务器广播给游戏中附近的其他玩家,该服务器会检查这些动作是否被允许。要求是需要尽快通知其他玩家这些行动。操作不需要按照发送的顺序进行交付,但是交付应该是可靠的

我正在考虑使用ZeroMQ来实现这一点。附近的玩家可以订阅同一主题,并发布/使用包含其他玩家动作的消息。与使用某种RPC实现通信相比,使用消息队列似乎非常有吸引力。不过,我有以下疑问:

ZeroMQ能否在一个不太稳定的蜂窝网络上正常工作 可信赖的 ZeroMQ不支持仅使用UDP发送消息 TCP。我不要求按顺序接收消息。如果 消息丢失,我希望接收者能够处理 在丢失的消息之后不等待丢失的消息 一个是重发。使用ZeroMQ可以实现这一点吗? 作为替代方案,我正在考虑使用ProtoBuf和Netty,例如,在上面实现UDP+可靠性。然而,这将是更多的工作,我不确定我是否能够实现比ZeroMQ更好的性能,ZeroMQ在这方面被认为是伟大的

实际上,通过蜂窝网络/互联网进行UDP通信是个好主意吗?运营商的防火墙、NAT等不会有任何问题吗?我假设应该可以,因为通信是通过公共服务器进行的,而不是点对点的


是否有支持UDP的快速可靠的消息队列?

这是否本质上要求玩家拥有一个外部可访问的IP地址才能在他们之间互连?3G上的设备,更不用说住宅WiFi网络可能是NAT。一个集中的酒吧/酒吧,每个主题都是散列的?地点可能是你最好的选择。为什么你认为NAT会成为这里的一个问题?这应该不是问题,因为连接将从客户端启动。根据我的经验,如果UDP端口映射空闲超过60秒,蜂窝网络上的NAT将超时。我想他们也会超时一个空闲的TCP端口映射,但它可能被允许活得更长。你最终使用了ZeroMQ吗?我有一个原型,它工作得很好,但没有经过大量测试。我认为它可能是一个很好的解决方案。没有持久消息,如果由于网络问题而无法发送消息,忽略异常并丢弃消息,或者执行您想要实现的任何故障转移..NAT应该不是什么大问题