SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3888|回复: 0
打印 上一主题 下一主题

[network] 客户端如何判断IRC连接是否依旧有效

[复制链接]

21

主题

36

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
跳转到指定楼层
楼主
发表于 2020-9-3 18:08:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不论是什么协议,客户端判断连接是否有效的一个最根本要求是在一定时间内必须从服务器收到数据。具体对IRC,涉及到这方面的有ping、pong机制。

IRC协议中的ping、pong机制
A向B发ping,B向A返回pong。方向可以是服务器向客户端,也可以是客户端向服务器。

服务器间隔多久向客户端发出ping?
实测下来,在chat.freenode.net:6665上测出来间隔时间是2.5分钟。

客户端间隔多久向服务器发出ping?
hexchat设置的间隔时间是30秒。
我认为间隔30秒有点短了,当存在大量连接时就是处理ping就会增加不少带宽。我把这个间隔拉长到1分钟。

当前在用的判断逻辑
1、当一直有收到数据时,不必做额外处理。
2、当超过1分钟没有收到数据时,向服务器发ping命令,如果在接下2分钟内没收到数据(包括pong),则认为连接已断开。
3、测试时遇到过发了ping后服务器不回pong,但再发ping又收到pong,也就是说即使连接有效发了ping也可能收不到pong!第2条其实保证了客户端会等3分钟,考虑到服务器会以小于3分钟间隔(2.5秒)向客户端发出ping,那么只要收到这个ping也会使客户端认为连接依旧有效。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 07:20 , Processed in 0.046279 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表