资讯专栏INFORMATION COLUMN

如何实现从 Redis 中订阅消息转发到 WebSocket 客户端

Dogee / 1820人阅读

摘要:的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。因此必须使用异步客户端来实现。

PHP 的redis扩展是阻塞式 IO ,使用订阅/发布模式时,会导致整个进程进入阻塞。因此必须使用SwooleRedis异步客户端来实现。

实例代码
$server = new swoole_websocket_server("0.0.0.0", 9501);

$server->on("workerStart", function ($server, $workerId) {
    $client = new swoole_redis;
    $client->on("message", function (swoole_redis $client, $result) use ($server) {
        if ($result[0] == "message") {
            foreach($server->connections as $fd) {
                $server->push($fd, $result[1]);
            }
        }
    });
    $client->connect("127.0.0.1", 6379, function (swoole_redis $client, $result) {
        $client->subscribe("msg_0");
    });
});

$server->on("open", function ($server, $request) {

});

$server->on("message", function (swoole_websocket_server $server, $frame) {
    $server->push($frame->fd, "hello");
});

$server->on("close", function ($serv, $fd) {

});

$server->start();
实现过程

在进程启动(onWorkerStart)时创建了SwooleRedis客户端,连接到Redis服务器

连接成功后,订阅msg_0主题的消息

当有新的message时,SwooleRedis会触发onMessage事件回调

在这个回调函数中使用$server->connections遍历服务器所有的连接,发送消息

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36434.html

相关文章

  • 如何实现 Redis 订阅消息转发 WebSocket 户端

    摘要:的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。因此必须使用异步客户端来实现。 PHP 的redis扩展是阻塞式 IO ,使用订阅/发布模式时,会导致整个进程进入阻塞。因此必须使用SwooleRedis异步客户端来实现。 实例代码 $server = new swoole_websocket_server(0.0.0.0, 9501); $server->on(worke...

    Jinkey 评论0 收藏0
  • 分布式WebSocket集群解决方案

    摘要:广播这是最简单的集群通讯解决方案。实现方法在治理中心监听集群服务事件,并及时更新哈希环。 问题起因 最近做项目时遇到了需要多用户之间通信的问题,涉及到了WebSocket握手请求,以及集群中WebSocket Session共享的问题。 期间我经过了几天的研究,总结出了几个实现分布式WebSocket集群的办法,从zuul到spring cloud gateway的不同尝试,总结出了...

    nanchen2251 评论0 收藏0
  • 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

    摘要:经过琢磨,其实是要考虑安全性的。具体在以下几个方面跨域连接协议升级前握手拦截器消息信道拦截器对于跨域问题,我们可以通过方法来设置可连接的域名,防止跨站连接。 前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就...

    e10101 评论0 收藏0
  • 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

    摘要:经过琢磨,其实是要考虑安全性的。具体在以下几个方面跨域连接协议升级前握手拦截器消息信道拦截器对于跨域问题,我们可以通过方法来设置可连接的域名,防止跨站连接。 前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就...

    JerryZou 评论0 收藏0
  • Django WebSocket Redis 在线聊天室

    摘要:它采用了请求响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理弊端协议无法实现服务器主动向客户端发起消息。如何使用客户端创建对象属性表示连接状态可选值表示连接尚未建立。表示连接正在进行关闭。 一言不合就上效果图演示showImg(https://segmentfault.com/img/bVbkUDl?w=1920&h=638); 项目:http://112.74.164.1...

    ranwu 评论0 收藏0

发表评论

0条评论

Dogee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<