swoole websocket isEstablished 判断为无效的连接?
小程序首次连接websocket后可正常推送消息,但是重连后偶尔出现isEstablished判断当前连接无效问题。是什么问题导致?还请有经验的朋友帮忙解答一下,在此谢过!!### 问题描述
问题出现的环境背景及自己尝试过哪些方法
检查过多次代码,发现问题就在isEstablished()判断为无效连接问题上,但是在小程序端显示是连接正常的,消息记录也能添加到数据库当中。
相关代码
/**
* [sendMsg 消息推送]
* @Date 2019-10-11
* @param [type] $data [description]
* @return [type] [description]
*/
private function sendMsg($data){
//消息要发给谁
$tofd = intval($data['tid']);
//判断是否在线
$fds = [];
foreach($this->ws->connections as $fd){
// 需要先判断是否是正确的websocket连接,否则有可能会push失败
if($this->ws->isEstablished($fd)){
array_push($fds, $fd);
}else{
echo('时间:【'.date('Y-m-d H:i:s').'】;websocket 连接不正确 fd无效。fd为:'.$fd."\n");
}
}
if(in_array($tofd,$fds)){
$tmp['content'] = $data['content']; //消息内容
$returnData = json_encode($tmp);
$this->ws->push($tofd , $returnData);
// 记录历史记录
$status = 1;
}else{
echo "sendMsg: 当前用户client-{$tofd}不在线\n";
// 记录离线消息
$status = 0;
}
// $this->addChatRocord($data,$status,$type);
}
你期待的结果是什么?实际看到的错误信息又是什么?
swoole日志当中没有任何的报错或者警告信息。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$this->ws->isEstablished($fd) // 按理说也可以判断。
$server->connection_info($fd) // 我线上的产品主要用这个函数判断
获取连接信息,
返回的数组中有一项为 websocket_status,必须为:3 才是有效的ws客户端。否则,踢下线,让客户端重连。
我公司最近的项目核心也是使用到了websocket模块。
首次登陆确实问题很少。
掉线以后,重新上线问题比较多。
1.重新上线,js客户端立刻就会断开连接,经过分析,属于客户端主动断开,具体原因未知,后来设置最大上线次数10,重连小于10,就让客户端反复上线。
经过反复测试验证,一般重连2-3次就稳定在线不会掉了,后续消息的发送都是稳定的。