关于ping的问题

0

ping的字符串和二进制数据格式是什么样的?ping采用什么机制?

已邀请:

walkor

赞同来自:

ping机制其实就是向客户端定时发送一小段数据
这段数据满足以下规则:
1、必须符合你的通讯协议
2、客户端能够识别ping的数据,客户端可以忽略服务端的ping数据或者回复一个pong的数据


例如你的通信协议是 text+回车
那么你可以发送一个 ping的数据例如 ping\n
方法如下:新建一个ping.data文件,内容为ping+回车,
配置Gateway.conf.ping_data = yourpath/ping.data
yourpath为你ping.data的目录


例如你的通信协议是websocket协议,你需要一个符合websocket协议的ping的数据。
方法如下:
进入到workerman项目目录,运行
php -a
include './applications/Chat/Protocols/WebSocket.php';
// yourpath为你要存放ping数据的地方
file_put_contents('/tmp/ping.data', \Protocols\Websocket::encode('ping'));
配置Gateway.conf.ping_data = /tmp/ping.data

aifei2533

赞同来自:

那服务端怎么处理ping不通的连接?
直接ping不同就踢掉连接还是多少次ping不通踢掉?

walkor

赞同来自:

ping 不通超时的话TCP层面会做重试,重试多次无果后回断开链接,触发Event::onclose重试次数等依赖服务器系统配置


ping的过程中发现客户端已经断开,则会立刻触发onClose

aifei2533

赞同来自:

重试次数等依赖服务器系统配置,这个怎么理解?现在的版本不是自己指定次数的是吗?

walkor

赞同来自:

TCP层面的重试只能通过更改操作系统配置来设置,workerman不能改动操作系统配置


不过可以在应用层面设置发出ping多久客户端未返回pong就断开链接,这个功能会再后面的版本实现

要回复问题请先登录注册