2016-04-11 10 views
1

hakkında desteğe ihtiyacınız var Sohbet mesajı sistemi uzun anket kullanımı BLPOP yapıyorum. Predis PHP'yi kullandım. test/get'u çalıştırdığımda -> 30s zaman aşımıyla okie çalışır.BLPOP Predis PHP

test/get'u çalıştırırken verileri test/push'a zorlamaya çalışıyorum ancak sorun var. test/get tamamlanmadığı sürece hemen yürütme işlemi yapılmaz. test/push 30s alır.

Verileri itmek için komut satırını kullanıyorum: RPUSH message:test hello -> Hemen uygulanıyor ve çok güzel.

require './vendor/autoload.php'; 

class Test extends CI_Controller { 
public $keyChat = 'message:test'; 
public function __construct() { 
    parent::__construct(); 
} 

public function push() { 
    $redis = new Predis\Client(['host' => 'localhost','port' => 6379]); 
    $redis->rpush($this->keyChat, 'hello you'); 
    $redis->expire($this->keyChat, 3600); 
    echo "send message success"; 
} 

    public function get() { 
     $redis = new Predis\Client(['host' => '127.0.0.1','port' => 6379]); 
     $res = $redis->blpop($this->keyChat, 30); 
     var_dump($res); 
    } 
} 

cevap

1

Eğer BLPOP belgeleri kontrol, bunu, sana başka Redis istemcisi nesnelleştirilmesiyle itmeye çalıştıklarını varsayalım bir engelleme işlemi olduğunu göreceksiniz, bu yüzden BLPOP değeri bulmak ve iade edebilirsiniz. Ben,

$redis->blpop($this->keyChat, 30);

komut satırından itin zaman çalışır nedeni farklı bağlantı olmasıdır:

30 saniye sorunu olduğu gibi engelini kaldırmak için BLPOP için zaman aşımı Predis durumunda emin değilim, ama ben RPUSH denediğinizde aynı bağlantı döndüğünü düşünüyorum, bu yüzden size bu sorunu veriyor.