V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
xxbutoo
V2EX  ›  PHP

phpRedis 扩展的 subscribe 订阅疑惑

  •  
  •   xxbutoo · Feb 17, 2021 · 1962 views
    This topic created in 1905 days ago, the information mentioned may be changed or developed.

    按照文档上的 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 replies    2021-02-17 21:09:04 +08:00
    2kCS5c0b0ITXE5k2
        1
    2kCS5c0b0ITXE5k2  
       Feb 17, 2021
    请用 php CLI
    gbqqaybc
        2
    gbqqaybc  
       Feb 17, 2021
    xxbutoo
        3
    xxbutoo  
    OP
       Feb 17, 2021
    @gbqqaybc 哈哈你这个。。。- -哦哦哦哦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3186 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 00:25 · PVG 08:25 · LAX 17:25 · JFK 20:25
    ♥ Do have faith in what you're doing.