V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xxbutoo
V2EX  ›  PHP

phpRedis 扩展的 subscribe 订阅疑惑

  •  
  •   xxbutoo · 2021-02-17 20:48:56 +08:00 · 1249 次点击
    这是一个创建于 1134 天前的主题,其中的信息可能已经有所发展或是发生改变。

    按照文档上的 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 又断开连接了。。

    3 条回复    2021-02-17 21:09:04 +08:00
    emeab
        1
    emeab  
       2021-02-17 20:55:32 +08:00
    请用 php CLI
    gbqqaybc
        2
    gbqqaybc  
       2021-02-17 21:04:13 +08:00
    xxbutoo
        3
    xxbutoo  
    OP
       2021-02-17 21:09:04 +08:00
    @gbqqaybc 哈哈你这个。。。- -哦哦哦哦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5290 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:18 · PVG 17:18 · LAX 02:18 · JFK 05:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.