允许人们在没有端口转发的情况下主持他们自己的多人游戏吗?
Allow people to host their own multiplayer without port forwarding?
现在 Steam 上有很多游戏(Table 顶级模拟器、SpeedRunners)允许人们在不需要端口转发的情况下托管自己的在线多人游戏matches/games。
关于他们是如何做到这一点的,我想到的一件事是他们只有一个服务器,将所有匹配作为单独的线程进行处理。
但后来我开始怀疑瓶颈问题。
然后我听说这些游戏只是以某种方式让 TCP 通过其 NAT 打洞,从而不再需要端口转发。
但是怎么说,C++ 使用 winsock,会这样做吗?还是 GameMaker: Studio?或者只是一般的游戏?你如何让人们在没有端口转发的情况下玩游戏?流程是什么?
现在steam上看到很多游戏都在做,应该不会太复杂吧
可以使用 UPnP 自动配置路由器进行端口转发。 http://pupnp.sourceforge.net/
中有一个库
另一种方法是让一个外部服务器管理所有流量,这样每个人都可以连接到那里,从而避免 nat 问题。
由于这个问题与 Steam 明确相关,我认为值得一提的是 Steamworks API,尤其是 SteamNetworking。它允许通过 Steam 服务器中继点对点连接:
https://partner.steamgames.com/doc/api/ISteamNetworking
bool AllowP2PPacketRelay( bool bAllow );
Allow or disallow P2P connections to fall back to being relayed
through the Steam servers if a direct connection or NAT-traversal
cannot be established.
现在 Steam 上有很多游戏(Table 顶级模拟器、SpeedRunners)允许人们在不需要端口转发的情况下托管自己的在线多人游戏matches/games。
关于他们是如何做到这一点的,我想到的一件事是他们只有一个服务器,将所有匹配作为单独的线程进行处理。
但后来我开始怀疑瓶颈问题。
然后我听说这些游戏只是以某种方式让 TCP 通过其 NAT 打洞,从而不再需要端口转发。
但是怎么说,C++ 使用 winsock,会这样做吗?还是 GameMaker: Studio?或者只是一般的游戏?你如何让人们在没有端口转发的情况下玩游戏?流程是什么?
现在steam上看到很多游戏都在做,应该不会太复杂吧
可以使用 UPnP 自动配置路由器进行端口转发。 http://pupnp.sourceforge.net/
中有一个库另一种方法是让一个外部服务器管理所有流量,这样每个人都可以连接到那里,从而避免 nat 问题。
由于这个问题与 Steam 明确相关,我认为值得一提的是 Steamworks API,尤其是 SteamNetworking。它允许通过 Steam 服务器中继点对点连接:
https://partner.steamgames.com/doc/api/ISteamNetworking
bool AllowP2PPacketRelay( bool bAllow );
Allow or disallow P2P connections to fall back to being relayed through the Steam servers if a direct connection or NAT-traversal cannot be established.