phpRedis 扩展的 subscribe 订阅疑惑

2021-02-17 20:48:56 +08:00
 xxbutoo

按照文档上的 demo https://github.com/phpredis/phpredis#connect-open

function f($redis, $chan, $msg) {
	switch($chan) {
		case 'chan-1':
			...
			break;

		case 'chan-2':
			...
			break;

		case 'chan-2':
			...
			break;
	}
}

$redis->subscribe(['chan-1', 'chan-2', 'chan-3'], 'f'); // subscribe to 3 chans```

我的 demo 如下:

$r = new Redis();
$r->pconnect('127.0.0.1', '6379');
$r->auth('test123456');

$r->subscribe(['chan-1', 'chan-2', 'chan-3'], function() {
	switch($chan) {
		case 'chan-1':
			file_put_contents('./tt.txt', '订阅消息 1' . $msg . "\n", FILE_APPEND);
			break;
		case 'chan-2':
			file_put_contents('./tt.txt', '订阅消息 2' . $msg . "\n", FILE_APPEND);
			break;
		case 'chan-2':
			 file_put_contents('./tt.txt', '订阅消息 3' . $msg . "\n", FILE_APPEND);
			break;
	}
}); 

但是发布以后 就一直没有返回值了。等了一会后就会抛出 read error on connection 异常

查了资料 subscribe 是阻塞模式 不会有返回值

于是我设置了

 ini_set('default_socket_timeout', -1);
$r->setOption($r::OPT_READ_TIMEOUT, -1);

执行后返回 502 了 脑瓜疼 cgi 和 nginx 又断开连接了。。

1279 次点击
所在节点    PHP
3 条回复
emeab
2021-02-17 20:55:32 +08:00
请用 php CLI
gbqqaybc
2021-02-17 21:04:13 +08:00
xxbutoo
2021-02-17 21:09:04 +08:00
@gbqqaybc 哈哈你这个。。。- -哦哦哦哦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753737

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX