允许人们在没有端口转发的情况下主持自己的多人游戏



现在Steam上有很多游戏(桌面模拟器、SpeedRunners),人们可以在不需要端口转发的情况下举办自己的在线多人游戏。

我想到的一件事是,他们只是有一个服务器,将所有匹配作为单独的线程处理。

但后来我开始怀疑自己会不会被瓶颈束缚住。

然后我听说这些游戏只是以某种方式允许TCP通过NAT穿孔,从而满足端口转发的需要。

但是,比方说,C++使用winsock,会如何做到这一点呢?还是GameMaker:工作室?或者只是一般的游戏?如何允许人们在没有端口转发的情况下进行游戏?过程是什么?

我现在在Steam上看到很多游戏都是这样做的,一定不会太复杂。

由于这个问题与steam有着明确的关系,我认为值得一提的是steamworks API,尤其是SteamNetworking。它允许通过蒸汽服务器进行对等连接中继:

https://partner.steamgames.com/doc/api/ISteamNetworking

bool AllowP2PPacketRelay( bool bAllow );

允许或不允许P2P连接回退到中继如果直接连接或NAT穿越,则通过Steam服务器无法建立。

可以使用UPnP自动配置路由器进行端口转发。里面有一个图书馆http://pupnp.sourceforge.net/

另一种方法是让一个外部服务器管理所有流量,这样每个人都可以连接到那里,从而避免nat问题。

相关内容

最新更新