1、订阅者,即接收消息的用户
订阅者先要与服务端建立连接,这样发布者才可以正常的发布消息,订阅者也才可以接收到消息。
下面是订阅者端的示例代码:
<?php
// 设置scoket连接有效时长
ini_set('default_scoket_timeout', -1);
// 实例化redis
$redis = new \Redis();
$res = $redis->connect('127.0.0.1', 6379);
/**
* 接收订阅消息
* ['task1', 'task2'] 订阅的频道名 可以多个
* $redis redis对象
* $currentChannel 当前的频道名
* $message 订阅消息内容
*/
$redis->subscribe(['task1', 'task2'], function($redis, $currentChannel, $message) {
switch ($currentChannel) {
case 'task1':
echo '这是task1的频道';
echo "\n";
echo $message."\t\n";
break;
case 'task2':
echo '这是task2的频道';
echo "\n";
echo $message."\t\n";
break;
}
});
因为订阅者要持续连接服务,才可以正常接收消息,所以不好直接通过浏览器的方式访问,这里我们通过命令行的方式去访问它。
php sub.php
这个时候,订阅端的工作就准备完成了,接下来就等发布端发布消息过来了。
2、发布者,即执行发布的管理人员
下面是发布端的示例代码:
<?php
$redis = new \Redis();
$res = $redis->connect('127.0.0.1', 6379);
$key = 'task2'; // Channel 订阅这频道的订阅者,都能收到消息
$value = 'hello world!';
$res = $redis->publish($key, $value);
if (!$res) {
echo '发布订阅失败!';
die;
}
echo '发布订阅成功!';
准备就绪后,就可以执行发布命令了(在浏览器中访问这个文件)
查看cmd(订阅者)