如果地图很大的话,判断和其他人的距离,只给一定距离内的人发送数据坐标,另外还可以通过改变发送频率来增强游戏性能。
如果这100人是同屏(就是任意两个人之间都要互相看到对方)的话,基本符合是你说的这样
区别在于 不是 “高频率的发送”,而是转发客户端的移动操作包。
因为人物移动是客户端发包给服务器的,发的包中包含的数据无非两种,一种是发目标点,一种是发移动方向。
而服务器只是把这个包转发给其他人,即广播给另外99个人。
客户端发一个包,服务器就广播一个,客户端发100个,服务器就广播100个。
可以优化的空间在:
1、如果客户端前后两个包发的是同一个目标点,或者同样的移动方向,第二个包就可以不用再转发。
2、如果客户端发包频率超过了一个阀值,服务器可以选择性的丢弃部分包,并在广播包中带上这个人在服务器上的当前位置,由接收的客户端做插值。
最新版本的CSGO提供了新的中继协议支持,名为SDR(Steamdatagramrelay)。相比于直接与游戏服务器传输数据,你的游戏客户端会选择一个中继并通过它来连接游戏服务器。
这种方式有几大好处:1.这可以把游戏服务器移出互联网,可以防止各种对服务器的攻击。2.如果一个Dos攻击使你无法连接某一个中继,游戏会自动切换到另一个中继,游戏会在几秒内自动完成切换。3.有多个中继备选意味着系统可以选择最优的网络路线来连接游戏服务器。
举个例子,Dota已经应用这个中继协议了一年,并且绝大部分美国的Dota玩家相比于以前的IP直连,延迟都得到了一定程度的降低,因为他们的客户端会自动选择最近的中继。这也意味着网络数据传输不再通过互联网,而在接入中继节点后走的是valve专线。
后面我们会向所有玩家开放这个协议,所有CSGO游戏都会使用中继协议。但是今天我想让大家知道一个可以使用这个协议的参数,几个月后会正式全面应用这个协议,在这之前你们可以帮我们测试并找出问题。
net_client_steamdatagram_enable_override1参数可以用来强制使用SDR(如果你所在的地区支持的话)。你可以看到你这能通过SDR模式连接因为目标地址不是IP形式的(xxx.xxx.xxx.xxx格式),他会变成=[A:N:NNNNNNN]。这个参数在你连接到服务器前才能开启,在连接进服务器后再修改则不会生效。开启后你的延迟算法也会发生变化。不是显示你游戏客户端到服务器的延迟,它显示的是客户端到中继节点的延迟。
steamdatagram_client_status参数会在控制台显示详细的网络状态。
SDR节点和游戏服务器使用的网络端口一样(27015-27200)
最后再说明一下延迟。控制台显示的SDR节点延迟不同于net_graph参数显示的延迟,也不同于通过ping参数测试的延迟。SDR节点的延迟是精确的,并且和一般的ICMPping一致。假设你的中继节点和游戏服务器都在一个地方,那么游戏里的延迟显示不会真的去测试,而是测量了游戏客户端发送数据,服务器处理,传回客户端,客户端处理完的总时间。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)