我正在制作一个多人游戏,玩家的动作通过网络发送,他们的位置存储在服务器中 . 我被告知UDP是最好的,因为它不依赖于持续连接,如果客户端错过了一个数据包也没关系 . 客户端可以在任何路由器上,不一定在服务器的LAN内 .
是否可以设置客户端可以连接的服务器,它将向所有服务器发送附近对象/播放器位置的定期更新?
我不想将数据包发送到每个客户端,我听说多播可以解决这个问题,但我看到的每个例子都只能通过本地网络发送数据包 . 我可以组播过去的路由器,如果是,我怎么能用Java做到这一点? (并向我解释,因为我不知道我在做什么,这主要是真的)
防爆 .
服务器的IP地址为71.10.200.133
客户端A的IP地址为38.49.339.293
客户B的IP地址为37.28.487.388
...
客户端Z的IP地址为43.38.382.949
客户端A向服务器发送有关玩家位置的更新
服务器向B-Z发送更新,而不向每个客户端迭代数据包 . 我如何做到这一点(如果可能的话)?
3 回答
当且仅当路由器允许时,多播才会遍历路由器 . 除非您控制着您和客户之间的所有路由器,否则您的问题的答案是“不” .
多播数据包是广播,因此它们到达该子网上的每个节点 . 对于您在Web上发送多播数据包不是一种有效或智能的数据发送方式 .
对于基于LAN的流量:
但是,对于互联网流量,我建议制作一个:
要么
基于互联网的流量和可能的基于LAN的组播(混合一点) .
For internet traffic: 请记住,客户端需要首先启动连接,因为大多数路由器(家庭)都有防火墙阻止所有新的外部到内部流量 . 所以创建一个套接字来监听任何传入连接的指定端口/端口,并从那里使用哪种分组广播/发送方式你喜欢
如果您具备此功能,还可以选择使用多播代理或第2层VPN . L2TP,https://en.wikipedia.org/wiki/Layer_2_Tunneling_Protocol第2层VPN将中继单播和多播数据包 . 这基本上允许您像上面提到的EJP一样控制路由器 . 这个问题也是3岁,所以你现在已经想办法做到这一点 .