• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 实现从Redis中订阅消息转发到 WebSocket 客户端

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

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了Redis,订阅消息,消息转发,WebSocket客户端等相关知识,希望对您有所帮助

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


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

实例代码

$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)时创建了Swoole\Redis客户端,连接到Redis服务器

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

当有新的message时,Swoole\Redis会触发onMessage事件回调

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 简单聊聊Redis中GETBIT和SETBIT
  • Laravel中用Observer事件致Redis队列异常问题
  • Thinkphp5+Redis实现商品秒杀代码实例讲解
  • 分享TP6框架中Redis操作服务类的记录
  • ThinkPHP5框架中Redis是如何使用和封装?
  • 关于ThinkPHP6多例Redis类实现
  • 服务器宝塔面板Redis无法随系统启动怎么办呢
  • Laravel使用redis队列实例讲解
  • Redis中热点Key是怎么产生的?如何解决?
  • thinkphp5 redis缓存新增方法实例讲解

相关文章

  • Photoshop绘制透明效果的五角星
  • 关于ThinkPHP多表联合查询的常用方法
  • 如何解决centos6终端乱码问题
  • 网站地图设计的五个技巧
  • Dropzone.js实现文件拖拽上传
  • 如何实现由抖音、快手、知乎、短信等外部APP或浏览器跳转到微信?
  • Illustrator制作OSX风格磁铁图标
  • PHP7如何使用set_error_handler和set_exception_handler处理异常机制
  • PHP中如何使用构造方法和this关键字?如何引入构造方法?
  • 数据库优化的几种方式分别是什么

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 怎么解决PHP高并发(商品秒杀)问题?两种解决方案分享
    • 原生JavaScript实现弹幕组件的方法
    • 详解wordpress非根目录部署nginx关键配置
    • 微信小程序自定义菜单导航实现楼梯效果
    • 如何升级或修改nodejs的版本
    • 教你使用PHP数据库迁移工具“Phinx”
    • Discuz怎么添加广告位?自定义广告位方法浅析
    • 如何将label标签与input标签进行绑定
    • PS+AI设计制作复古的霓虹灯字体效果教程
    • laravel-admin怎么使用wang-editor富文本插件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有