如何让客户端在2个客户端之间托管游戏而不是托管它的服务器

时间:2014-03-24 22:08:39

标签: java client-server multiplayer

如“使命召唤”和“光晕”,我将如何制作我不会主持的游戏?我怎么能有一个连接到我的服务器主机的客户端游戏以节省我服务器上的空间?

我没有任何尝试,因为我不确定逻辑是如何发挥作用的。我最接近的猜测是你必须以某种方式在两个客户之间重新建立一个单独的私人连接。但我自己必须确保端口转发并托管在正确的端口以确保人们可以连接,所以我不知道如何设置这种类型的系统。

所以基本上: 2客户端连接到服务器 服务器创建游戏,但不想处理2之间的数据 服务器选择一个客户端来托管游戏,该游戏依赖于该主机的连接

1 个答案:

答案 0 :(得分:0)

这是网络中的经典问题。最常见的解决方案是用于P2P呼叫的VoIP基础设施。因此,正如您所提到的那样,客户端连接到一个中央服务器,然后玩家就可以自行管理通信,即媒体或游戏数据传输。

在这种情况下,中央服务器负责发信号并介绍玩家。通信参数通过中央服务器协商。执行此操作的常用协议是SIP,用于协商端口和IP地址 - SIP消息的主体将包含SDP消息。 http://en.wikipedia.org/wiki/Session_Initiation_Protocol

专门针对NAT遍历行业标准是ICE http://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment

请注意,完全实现上述协议和标准并非易事,因为有多种网络配置可能。因此,我建议您使用上述内容来了解​​您的方案的复杂性。然后根据您的感受 - 实施您认为重要的部分。

或者,不要放弃让中央服务器处理数据的可能性。它让事情变得更加简单。