ping的字符串和二进制数据格式是什么样的?ping采用什么机制?
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
那服务端怎么处理ping不通的连接? 直接ping不同就踢掉连接还是多少次ping不通踢掉?
这个可以设置 在conf/conf.d/Gateway.conf设置 ping_not_response_limit = N 代表客户端连续N次没有回应心跳数据就断开链接,N可以为1
ping 不通超时的话TCP层面会做重试,重试多次无果后回断开链接,触发Event::onclose重试次数等依赖服务器系统配置
ping的过程中发现客户端已经断开,则会立刻触发onClose
重试次数等依赖服务器系统配置,这个怎么理解?现在的版本不是自己指定次数的是吗?
TCP层面的重试只能通过更改操作系统配置来设置,workerman不能改动操作系统配置
不过可以在应用层面设置发出ping多久客户端未返回pong就断开链接,这个功能会再后面的版本实现
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
那服务端怎么处理ping不通的连接?
直接ping不同就踢掉连接还是多少次ping不通踢掉?
这个可以设置 在conf/conf.d/Gateway.conf设置
ping_not_response_limit = N
代表客户端连续N次没有回应心跳数据就断开链接,N可以为1
ping 不通超时的话TCP层面会做重试,重试多次无果后回断开链接,触发Event::onclose重试次数等依赖服务器系统配置
ping的过程中发现客户端已经断开,则会立刻触发onClose
重试次数等依赖服务器系统配置,这个怎么理解?现在的版本不是自己指定次数的是吗?
TCP层面的重试只能通过更改操作系统配置来设置,workerman不能改动操作系统配置
不过可以在应用层面设置发出ping多久客户端未返回pong就断开链接,这个功能会再后面的版本实现