在许多多人游戏中,有局域网游戏的选择。不过,我的问题是,客户如何知道服务器在局域网上的位置?
我唯一能想到的办法
游戏是如何做到这一点的,特别是在其他网络环境中?
发布于 2011-06-09 14:18:14
对于局域网游戏,标准的做法是客户端发送广播数据包来发现服务器。(客户端发送广播,服务器直接向客户端发送答复)
一般来说,客户端将发送大约3到5条广播消息,每条消息间隔约1秒钟,然后决定如果在这段时间内没有听到任何答复,就必须没有服务器。发送多个数据包使服务发现更能容忍数据包丢失(尽管这在局域网中非常少见),而且在它们之间有时间可以防止它们过多地干扰其他网络通信。
(据我所知)没有人会选择#2,因为它会降低LAN的性能(或者,如果您错开连接尝试,将花费相当长的时间)。
但是,为了应对广播被本地局域网过滤的情况(这是非常不寻常的,但并非闻所未闻),大多数游戏将允许玩家直接输入要连接的IP地址。这允许玩家在这种情况下连接到一个已知的服务器,即使他们不能广播自动找到它。
对于互联网上的游戏,客户端将直接向静态元服务器发送请求,该服务器将使用已知当前服务器实例的地址进行回复。服务器,同样,联系该元服务器,以通知他们自己的位置,以便客户端可以指向他们。然而,由于NAT的复杂性,这种方法通常不适用于局域网中托管的服务器。这就是为什么这种方法通常不用于局域网游戏。
额外的注意事项:网络游戏通常会先联系点服务器。点服务器告诉游戏它可以找到什么地址--元服务器,这会告诉它可以在哪里找到服务器。点服务器通常(当然不是总是)作为一个简单的web服务器实现,并且是这个系统中唯一具有硬编码到游戏中的地址的部分。这允许游戏开发人员根据需要将他们的元服务器从一台机器移动到另一台机器,只需更新点服务器返回的地址即可。它还可以用于实现简单形式的负载平衡或区域切换,让点服务器根据服务器负载或地理位置将用户发送到不同的元服务器。
https://gamedev.stackexchange.com/questions/13427
复制