Swoole 总是连接不上怎么办

码农天地 -
Swoole 总是连接不上怎么办
前言

之前做过一个基于 Swoole 的长连接的项目,用来实时收集 client 的一些数据。上线没多久之后发现一个问题:有时候 client 连接不上 server,握手阶段也没通过(Websocket 基于 HTTP 握手协议来建立连接的)

追踪定位

发生问题后,第一时间进行了处理,检查了进程、日志的点,均无异常
当初上线之前是做过压测,是符合项目的用户量也有余的,然后想到了是不是有可能连接数已经接近上限了
netstat -nat|grep -i '443'|wc -l
果然连接数接近了之前压测时的值,正常情况下,是达不到这个连接数的,一个普通的时间段一个高位的连接数,最大怀疑是:连接没能及时断开,导致的堆积

解决

有了疑问就先尝试修复,之前粗略地全面看过官方手册,记得是支持心跳检测的,利用此项至少是可以避免掉一部分无效连接的,配置如下

heartbeat_check_interval 表示心跳检测频率,单位是秒,需要根据业务需要来设定,服务端没有主动发起心跳,连接数较多的话代价也大,所以聪明的等待 client 的消息上传,等着被撩 ?,最后一次的信息时间点开始累积,超过限制即被关闭heartbeat_idle_time 表示心跳检测如果在此项配置的时间内没有发送,连接将被关闭,单位是秒

加上配置后观察了一段时间,发现连接数终于“理性”了 ?
并且后来再没出过此类问题

出现这个问题大概有两个原因
一是用户可能没有及时关闭页面导致连接一直存在,但是已经没有意义了,关上也无妨,况且我们设有重连机制
二是两个连接中间经过或多或少的路由器以及其它设备,由于其中的某一项的断开也是很可能的

小结

使用各组件、插件等服务前最好还是大略地看一遍配置,有助于一些个性化需求的满足,出现问题后再去翻阅也是可以的,可能会给你一些启迪

参考手册:https://wiki.swoole.com/#/server/setting?id=heartbeat_check_interval
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

phpswoolewebsocket

扩展阅读

加个好友,技术交流

1628738909466805.jpg