gatewayworker 与 redis 进行连接,gatewayworker 的客户端 通过 onmessage 第一次触发redis连接的时候,就会产生连接失败的问题。
值得注意的是,只有gatewayworker客户端在第一次触发redis的时候,才会遇到连接失败的问题,第二次及以后都是连接正常,而且在redis重启后,也是会在第一次连接redis时遇到连接失败的 问题。
说远程主机强迫关闭了一个现有连接,(有时候也会显示 Redis server went away)
如图:
因为redis的哈希表是在thinkphp中创建的,我以为是onmessage在控制器还未来得及创建hash的时候,就开始访问hash,因此造成的错误。
所以,还在前端页面,做了一个500毫秒的缓释,让前端客户端在500毫秒以后再发送message触发onmessage,给控制器创建hash的时间。
console.info("向服务端发送心跳包字符串");
//发送在线监控心跳
setInterval(show,60000);
}
function show(){
ws.send(message_data);//非第一次扣费,每60秒扣费一次
}
ws.onConnect = function(e){
console.info(e);
}
后来发现,即便把缓释时间设置到2秒钟,依然无法连接redis,而且在控制器已经成功创建hash表以后,再由客户端触发onmessage,依然有无法连接redis的问题,这说明不是hash创建的问题了。
今天与gatewayworker的布道大神walkor 沟通了一下这个问题:
Gatewayworker奇异的RedisException-Redis连接异常问题
https://wenda.workerman.net/question/3420
walkor给了一个测试思路和代码:
也就是说只有redis重启后才会有这个问题是吧?应该是redis被重启了,之前的redis连接无效了,再次使用这个redis连接的时候报了这个错误。
test.php 里可以这样测试
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
echo "睡眠20秒,这时候去重启redis\n";
sleep(