前提条件: websocket服务器 采用的框架的事laravels框架, 利用swoole插件的tcp协议提供websocket推送服务 ; 为前端 和 python之间创建沟通的桥梁。 服务端 : PHP + swoole + redis + mysql 客户端 : python 、前端 出现过问题记录: 1.服务端 无故宕机,websocket服务器不可使用,日志文件没有明确的错误日志写入 ; 原因以及解决办法:服务器IP被更改,没有及时的添加redis 和 mysql 的白名单,导致redis和mysql连接出错,设置白名单的之后恢复正常。(低级错误)。 2.服务器端日志记录redis连接超时的日志信息; 原因以及解决办法:初步原因没有利用redis连接池,只是普通创建redis连接对象;建立redis连接池,从连接池中获取redis连接对象,连接池每个框架配置不同,原理都相同, 3.WARNING swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11 swoole 日志提示; 原因以及解决办法: 程序导致了swoole触发内部错误,三种方案; 方案一:如果比较牛逼调试底层,修改错误; 方案二:将自己错误提交给swoole团队或者咨询swoole团队 怎么处理;swoole官方链接 ; 方案三:升级swoole版本,可能是swoole低版本遗留的bug被你触发,咨询他们估计也是让你升级版本。目前我们处理的方式是升级了swoole版本,升级后,问题没有在出现过。 4.交互之间的问题,譬如我和python端交互,python发送消息我这边收不到(也不是完全收不到,运行一段时间后,python发送的消息无法接口)。 原因以及解决办法:这个问题就比较难搞,因为python端说我发成功了,你收不到也没有回复我,就是你服务端的问题。我们只能查找原因了。这类问题不能归咎于一端问题。需要双方配合检查 (1)、将日志文件写详细(一个链接从创建到关闭的整个流程日志文件要详细记录),什么时间段出现问题与异常 全部记录出来,这样便于你发现问题,对于这个问题,只能拿证据来说明事情。 (2)、swoole每个进程的缓存区的配置的设置,这个根据你项目实际运行情况,调整大小。因为如果缓存区满了也可能导致消息无法及时处理,出现接受不到假象。但出日志上无法体现这个现象官方链接 ; (3)、websocket 连接一定需要加ping功能 和 失败重连的功能。因为很多原因都能导致websocket通讯断开,重连的机制 能保证客户端的稳定性(客户端)5.在websocket连接代码中,不能使用sleep() 等 函数 ,发生代码程序阻塞,影响代码效率,可以利用异步任务的方式 来实现相同的操作
评论 (0)