时隔半年左右,之前使用uniapp 做的一个聊天应用,刚好最近有客户需要,所以重新拿出来整理一下,一开始使用的是:thinkphp workerman mysql 作为后端,uniapp作为前端。
一开始也没什么问题,但是偶尔会出现:SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
也就是mysql偶尔会出现断开的问题,其实也正常,聊天也算是有并发存在的,并且反馈的速度也需要大概1s左右(小于1s),感觉不完美,于是干脆使用redis。
由于本地使用了集成环境 phpstudy 8.0 里面已经有redis3.0 版,而且我本地也安装了,于是直接修改为redis,workerman 的接收消息基本上是零延迟了。
于是继续测试,测试期间中间离开了一会,回来发现聊天虽然是正常的,但是redis记录聊天内容却出现了:Redis::hLen(): send of 35 bytes failed with errno=10054;即错误码10054。一查错误原因:那就是redis断开了连接,于是我就想着怎么解决redis断开重连的问题,可是呢?无论怎么搞都不可以,总会出现断开的情况,然后各种百度,最终发现了一篇文章的解决方案:redis连接处于空闲数小时被自动断开 根据文章最后github提供的原文地址:https://github.com/andymccurdy/redis-py/issues/1186 发现问题:
就是说,redis的版本要大于3.3.x之后的版本,当redis 连接断开时,会自动进行重连,保证redis 不会断开,所以只需要更新redis的版本既可以,因为phpstudy 8.0 只有3.0 所以需要重新安装一个redis即可 ,window 版本下载地址: Releases · tporadowski/redis · GitHub
这一次我就算半个小时之后,进行聊天redis也再没有出现断开的情况。
记录与2022.03.28