如何使用predis多次发布

ale*_*ash 2 php predis

如何在客户端之间多次发布信息?
我的意思是当我将信息从一个用户发布到另一个用户时,他收到并退回,但这只是一次.
因为当一个用户向另一个用户发送内容时,正在加载GET并且接收停止,我怎样才能这样做,以便客户端永远收到,而不仅仅是一次?

ami*_*jer 6

pub/sub是如何工作的:就像一个频道,你从一边放,你从另一边得到同样的东西.

因此,只有当有一些订阅者时才会收到发布者数据.

使用pubSub上下文并订阅一个名为"x"的频道,并从另一侧订阅,从User继续获取数据,并每次使用publish命令将其发布到同一个频道.

订户:

$redis = new Predis\Client(// put setting here, if req);
$pubsub = $redis->pubSub();
$pubsub->subscribe($channel1);

foreach ($pubsub as $message)
{
    switch ($message->kind) {
        case 'subscribe':
            echo "Subscribed to {$message->channel}\n";
            break;

        case 'message':
            // do something
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

出版商:

while(1) // or whatever condition
{

   $redis->publish($channel2, $userdata);

}
Run Code Online (Sandbox Code Playgroud)

您可以使用聊天消息来断开连接,例如发布退出并在订阅者处检查,如果退出然后关闭连接,然后在发布者端检查是否没有订户连接,也关闭它.

  • 4年后仍然有用。唯一的区别是 pubSub() 现在是 pubSubLoop()。请记住,脚本 $redis 的发布者部分是客户端实例。这就是 amitchhajer 的回应所表明的,但我给我的变量命名有点不同,然后感到困惑并试图发布到 $redis->pubSubLoop() 返回的对象,因为它的名字表明它也处理发布。 (2认同)