gatewayworker与redis连接失败的问题处理

文章描述了在gatewayworker中遇到的客户端首次连接redis失败的问题,问题仅出现在第一次触发onmessage时,且redis重启后同样存在。作者尝试了前端缓释、检查hash创建时间等方法,但未解决问题。在与walkor交流后,了解到redis重启后旧连接会失效。通过try-catch强制重连解决了这个问题,确保了即使首次连接失败也能在后续进行重连,防止数据丢失。代码中在onWorkerStart中初始化连接,并在onMessage中用try-catch处理异常并进行重连。
摘要由CSDN通过智能技术生成

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(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值