3

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

4

1 回答 1

7

pub/sub 是如何工作的:就像一个频道,你从一侧输入,从另一侧得到相同的结果。

因此,只有在有订阅者时才会收到发布者数据。

使用 pubSub 上下文并订阅一个频道,比如“x”,然后从另一端继续获取数据,比如来自用户,然后每次使用发布命令将其发布到同一个频道。

订户:

$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;
    }
}

出版商:

while(1) // or whatever condition
{

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

}

您可以使用聊天消息来断开连接,例如发布退出并在订阅者处检查是否退出然后关闭连接,然后在发布者端检查是否未附加订阅者,也将其关闭。

于 2012-07-31T18:56:53.117 回答