注意:这是有关网络而不是游戏的问题。我仅以星际争霸为例。
游戏《星际争霸》(不是《星际争霸2》)支持在线游戏。一个人主持,其他人参加。如果主机在游戏过程中离开,则游戏可以在没有主机的情况下无限期继续。这是如何运作的?
请考虑以下情形:
- 我将3托管为3。请注意,为了使人们能够加入,我的路由器必须配置为转发6112,TCP和UDP端口(请参阅Blizzard支持)。
- 五个人参加。每个人(包括我本人)都在路由器后面。我开始游戏。
- 比赛开始三分钟后,大约有二十位狂热者涌入我的基地。没有人帮助我。
- 我的阵营被淘汰,所以我离开了(游戏没有给您选择)。
- 比赛在没有东道主的情况下继续进行(主队剩下两名球员)。
其余五个客户端(不需要转发6112)如何保持连接?
如果我理解正确:如果两个程序要互相通信,则其中一个必须是“服务器”并侦听端口上的连接,而另一个则必须是“客户端”并在该端口上发起连接请求港口。他们不能简单地开始向对方发送数据包(如果两个都在路由器后面,我什至不知道他们会怎么做)。
主持游戏的人是服务器,而加入游戏的人是客户端。很容易看到客户端如何开始与服务器通信。我不明白的是:客户端如何不通过服务器就开始彼此通信?Internet协议是否允许服务器启动客户端之间的连接?
就星际争霸而言,游戏流量完全可能通过Battle.net服务器。在游戏过程中,星际争霸确实维持与Battle.net的连接(用于来自朋友等的消息)。但是,我怀疑游戏流量会通过它,因为如果这样做了,为什么主机需要移植6112?
我的问题是:连接有多个客户端的服务器是否可以启动它们之间的连接?
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
显然,这是开始游戏所必需的,以便用户可以找到您,但不需要保持联系。