为啥检测延迟合适的本地官方游戏绝地求生服务器延迟失败

坦克世界服务器延迟测试工具下载 2.0版_ - pc6下载站4142人阅读
erlang(32)
之前看代码没仔细,一直以为我们的心跳包就是为了防止socket自动断开连接
直到同事刚刚讲,这个超时是我们自己设置的啊....socket本身就是长连接
accept(Socket) -&
Ref = prim_inet:async_recy(Socket, 5, 600)
{inet_async, Socket, Ref, {error, timeout}} -&
.囧。。。。。竟然看漏了
那么心跳包的意义在哪里?
首先查一下tcp的断线是否真的可靠
看到了一位同学的经验
&&&&&&&& 之前的测试都是,手动强制关闭客户端进程,然后查看服务器的情况,结果往往是,服务器收到了客户端关闭的事件。其实,我一直忽略了一个问题,我没有拔掉网线来测试!
&&&&&&& 上面的手动关闭客户端进程,事实上并不能测试出想要的结果,因为进程是在应用层的,所以,这种测试方法不能保证网络驱动层也不发送数据报文给服务器。经过测试发现,当应用层强制结束进程时,对于TCP连接,驱动层会发送reset数据包!而服务器收到这个数据包就可以正常关闭了!
&&&&&&& 那么,如果拔掉网线呢,服务器收不到这个数据包,就会导致死连接存在!
&&&&&&& 所以,心跳包是必要的,或者使用TCP协议本身的Keep-alive来设置
&&&&&&& 之所以产生前面的误解,也是由于以前看书的时候,凭空想象,以为TCP连接如同一条绳子,一方断开了,另外一方必然会知道的。殊不知,TCP连接,这个“面向连接”的连接并不存在,它只是抽象出来的概念,对于物理层,对于网线、光纤而言,不存在连接不连接的概念,因为,对它们而言,无非就是一些电流脉冲而已。TCP的连接,不过是通过ACK、SEQ这些机制来模拟实现的。
以上为引用
这么看来socket本身的断开通知不是很靠谱,心跳包会更合理一些
那么心跳包的一个意义就是可以更可靠的检测连接是否畅通
之后询问了一下组内其他同学
他们表示,页游之前会用心跳包检测加速作弊
比如如果某玩家使用加速器作弊,那么他发送的心跳包时间时间间隔就会异常,这样就可以揪出作弊,但是。。作弊器已经越来越高端了,检测心跳包已经几乎没用,所以这个作用几乎没有了
心跳包曾经可以检测作弊
组内同学还表示,心跳包可以检测游戏延迟,不过。。。手游我检测个什么延迟
心跳包可以检测游戏延迟
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:52881次
排名:千里之外
原创:53篇
(1)(1)(1)(5)(2)(6)(2)(2)(1)(2)(1)(4)(10)(8)(2)(4)(3)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 绝地求生服务器延迟 的文章

 

随机推荐