使用AsyncTcpConnection实现的WS客户端reConnect()在onClose回调中调用,实现断线重连. 重新连接之后打印的发送数据会根据重启的次数增加, 例如第一次就一次发送一条 第二次就一次发送2次,第三次就一次发送3条以此类推,
public function onWorkerStart()
{
//ws 形式连接
$con = new AsyncTcpConnection('ws://192.168.55.31:2000/ws');
// $con->websocketPingInterval = 50;
//当连接建立成功时,发送http请求数据
$con->onConnect = function(AsyncTcpConnection $con) {
//定时发送消息
Timer::add(5, function () use ($con) {
$con->send("连接成功goWebsocket\n");
});
};
//返回的消息
$con->onMessage = function(AsyncTcpConnection $con, $data) {
echo $data;
};
// 当连接远程websocket服务器的连接断开时
$con->onClose = function(AsyncTcpConnection $con){
echo "连接关闭\n";
$con->reConnect(5);
};
$con->onError = function(AsyncTcpConnection $con, $err_code, $err_msg) {
echo "$err_code, $err_msg \n";
};
$con->connect();
}
这个onClose关闭之后调用重启为什么会这样了?
重连后会再次调用onConnect方法,所以你onConnect方法里定时器被重复添加了。
改成这样
谢谢walkor的解答。 这样没有问题了。 我建议在workerman的AsyncTcpConnection类的reConnect 方法文档也改一下, 应该会有人也碰到这样问题。 谢谢!
已经增加提示
棒 这速度真是可以 谢谢walkor的无私奉献。