1.java subscribe监听超时怎么解决
java subscribe监听超时怎么解决
问题描述redis提供了pub/sub功能,但在使用phpredis的源码subscribe时发现这样一个问题,代码如下(sub.php):
<?牛源php/*监听demo频道,打印收到的源码直播福利页面源码信息*/function process($redis, $chan, $msg){
var_dump($msg);
}$redis = new Redis();$res = $redis->connect('.0.0.1', '');$redis->subscribe(array('demo'), 'process');
代码运行后,发现如果在一段时间内未收到来自demo频道的牛源消息,则会报如下错误:
PHP Fatal error: Uncaught exception 'RedisException' with message 'read error on connection' in sub.php:Stack trace:#0 /search/ballqiu/sub.php(): Redis->subscribe(Array,源码源码设计的教程 'process')#1 { main}
thrown in sub.php on line
原因分析
为了查找原因,我们使用strace对代码进行了跟踪:
strace php sub.php1
截取部分重要输出如下:
//连接redis
connect(3,牛源 { sa_family=AF_INET, sin_port=htons(), sin_addr=inet_addr(".0.0.1")}, ) = -1 EINPROGRESS (Operation now in progress)
//发送subscribe命令
sendto(3, "subscribe demo\r\n", , MSG_DONTWAIT, NULL, 0) = //收到响应
recvfrom(3, "*3\r\n$9\r\nsubscribe\r\n$4\r\ndemo\r\n:1\r"..., , MSG_DONTWAIT, NULL, NULL) = poll([{ fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
//套机字超时时间设为s
poll([{ fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, ) = 0 (Timeout)
//等待超时,关闭连接
close(3) = 0//输出错误信息
write(2,源码 "PHP Fatal error: Uncaught excep"..., PHP Fatal error: Uncaught exception 'RedisException' with message 'read error on connection'
可见报错的本质是poll设置接收超时所致,从starce结果我们知道这个超时默认是牛源s。
解决
我们有两种方法改变超时
- 方法1
在代码起始处设置
ini_set('default_socket_timeout',源码 -1);1
方法2
在redis connect后执行
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);1 两种方法中的-1均表示永不超时,你也可以将超时设置为自己希望的牛源时间。无论使用哪种方法,源码再次strace,牛源自学java教程源码 你会发现poll的源码超时被设为了-1。
recvfrom(3,牛源 "*3\r\n$9\r\nsubscribe\r\n$4\r\ndemo\r\n:1\r"..., , 0, NULL, NULL) = poll([{ fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)//超时被设为-1, 即永不超时
poll([{ fd=3,java源码开发平台 events=POLLIN|POLLERR|POLLHUP}], 1, -
个人比较推荐方法2,它只影响到redis本身。而方法1会对其它方法产生影响,比如file_get_contents等。nacos系统源码分析
总结
使用phpredis的subscribe时,默认内没有收到消息,sub端就会因超时异常退出。可以自行设置延长超时时间或永不超时。
2025-02-08 10:20239人浏览
2025-02-08 10:082253人浏览
2025-02-08 09:34775人浏览
2025-02-08 08:502647人浏览
2025-02-08 08:401021人浏览
2025-02-08 07:491240人浏览
中国消费者报报道记者郑铁峰)秋季开学之际,为共同营造最具安全感的学生成长环境、进一步规范校园周边消费市场,温州市场监管部门“多点切入”,结合食品安全“守底线、查隐患、保安全”专项行动,开展中小学校食堂
中国消费者报福州讯记者张文章)8月9日,福建省涉企违规收费专项整治行动电视电话会议在福州召开。会上,福建省发改委、财政厅、市场监管局、交通厅、银保监局和民政厅有关负责人就整治行动方案和重点领域涉企违规
中国消费者报福州讯记者张文章)近日,由福建省福州市台江区食安办、台江区市场监管局主办,区食安委成员相关成员单位协办的“打造上下杭街区)省级食品安全示范街”暨2022年台江区食品安全宣传周活动在闽江之心