关于ping的问题

aifei2533

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

4341 5 0
5个回答

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不通踢掉?

  • chosen1cwp 2014-08-29

    这个可以设置 在conf/conf.d/Gateway.conf设置
    ping_not_response_limit = N
    代表客户端连续N次没有回应心跳数据就断开链接,N可以为1

walkor

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

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

  • 暂无评论
aifei2533

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

  • 暂无评论
walkor

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

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

  • 暂无评论
年代过于久远,无法发表回答
🔝