如何使用redis发布/订阅

2024-05-26

目前我正在使用node.js和redis来构建应用程序,我使用redis的原因是因为发布/订阅功能。该应用程序只是在用户进入用户或离开房间时通知经理。

function publishMsg( channel , mssage){
    redisClient.publish(channel,JSON.stringify());
}

publishMsg('room/1/user/b',{'room':1,'user':'b'});
publishMsg('room/1/user/c',{'room':1,'user':'c'});
publishMsg('room/2/user/b',{'room':2,'user':'b'});
publishMsg('room/2/user/c',{'room':2,'user':'c'});

function subscribe(pattern){
    redisClient.psubscribe(pattern);
    redisClient.on('pmessage', function(pattern, channel, message){     
        console.log('on publish / subscribe   ',  pattern+"   "+channel+"    "+message+"   "+ JSON.parse( message) );
    });
}

因为我想听加入和分离事件,所以我的问题是 我应该使用两个redisclient来监听这两个事件,比如

   redisClient1.psubscribe('room/*/user/*/join');
   redisClient2.psubscribe('room/*/user/*/disjoin');

或者只使用一个 Redis 客户端来监听并分离回调内的逻辑

   redisClient2.psubscribe('room/*/user/*');

我知道这两种方式都是可行的,但我不知道现实中人们如何使用它们,在什么情况下使用它们?


您可以安全地重用同一个 Redis 连接来订阅多个频道,但不能使用同一个连接来执行其他(非订阅相关)任务。这Redis 文档 http://redis.io/commands/subscribe states:

一旦客户端进入订阅状态,除了额外的 SUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE 和 PUNSUBSCRIBE 命令之外,它不应该发出任何其他命令。

我总是在 Node 中使用单个 Redis 连接来监听订阅的频道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用redis发布/订阅 的相关文章

随机推荐

  • 通过 preg_match_all PHP 函数从 html 代码字符串中提取 img 标签

    我有一些 html 代码并提取了img src来自它的属性 html 字符串中有一些像这样的 img img src http www pecso it wp content uploads 2016 12 10 WRAS png 我尝试使
  • 仅部分页面滚动的 html 布局

    我想创建一个分为 3 部分的页面布局 一列具有固定宽度 其中包含两行具有固定高度 另一个具有固定宽度的列 可能包含多个项目 超出视图范围 我正在寻找一种方法 使页面滚动仅影响项目列 以便屏幕的左侧 第一列 保持在视图中 下面是布局的示例图像
  • SagePay 直接集成套件 v4.00 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 4 00 版本的 Dot Net SagePay 直接集成套件 我试图在 SagePay
  • boost.asio 链接和库

    我是 boost asio 编程的新手 并且在链接 boost 库时遇到困难 我的问题是 当我包含 asio 标头时 如何找出应该链接到我的项目的库 例如我用过 include
  • Paypal PDT交易ID有效期

    当我尝试使用交易 ID 检索付款信息时 我从 paypal PDT 收到错误 4003 虽然我这里有一个类似的线程 贝宝 PDT 错误 4003 https stackoverflow com questions 8521800 paypa
  • bootstrap navbar-static-top 菜单分成两行

    我遇到了引导导航栏的问题 我使用 navbar static top 制作了菜单 起初一切都很好 当菜单被展开并添加了一些项目时 现在随着折叠之前的宽度 它扩展到两行 看起来很糟糕 在 CSS bootstrap 中进行了更深入的挖掘 但没
  • 查明 AD 中的组是否属于通讯组?

    我正在使用 ASP net 和 C 并且对 Active Directory 知之甚少 我接到一项任务 按以下步骤编写程序 ASP net 应用程序被赋予用户的用户名 应用程序应查询具有给定用户名的用户的所有组 然后 应用程序应将这些组显示
  • 使用资源进行主题化,无需 Blend 呕吐

    WPF 的伟大之处在于 我应该能够在整个应用程序中使用 StaticResource MyBackground 而不是 White 然后通过更改资源定义重新定义整个应用程序的外观 问题是如果您在子控件中引用了全局资源 Expression
  • GNU Global 和 GTAGS 找不到类定义

    我在全局查找类 结构定义时遇到问题 我可以使用丰富的 ctags 和 cscope 找到它们 所有标记文件都是从相同的源文件列表构建的 我配置并构建了全局等 仅指定了 prefix configure 确实发现了 exhuberant 并且
  • Anythingslider 触摸滑动功能可阻止 IOS 和平板设备上链接的正常点击

    我正在将任何滑块 jquery 插件与触摸事件一起使用 它似乎在所有设备上都能按预期工作 允许用户通过触摸平板电脑和 iOS 设备以及在桌面上使用鼠标来 滑动 slider anythingSlider Callback when the
  • 使用 volatile 关键字时出现内存一致性错误的示例?

    来自文档 使用易失性变量可以降低内存一致性错误的风险 但这是否意味着有时易失性变量无法正常工作 奇怪的是它的使用方式 在我看来 这是非常糟糕的代码 有时工作有时不工作 我尝试谷歌 但没有找到易失性内存一致性错误的示例 您能推荐一个吗 问题不
  • WordPress > 通过脚本错误设置永久链接选项?

    我的主题的自定义选项面板具有以下代码 初始化站点选项 if get option permalink struct update option permalink struct postname 这会检查永久链接选项设置 并且由于 WP 默
  • 如何在 Xcode 8 中更改应用程序显示名称以添加空格

    我试图在 Xcode 8 中的应用程序名称 独立贴纸包 中添加一个空格 我在这里看到的解决方案是更改产品名称 在包装中 或更改 捆绑显示名称 我更改了产品名称 但没有起作用 我清理 重建 重置模拟器中的内容和设置 并注销 xcode 重新登
  • FileReader 读取 PDF 时丢失数据

    我的限制是只能以 JSON 格式将数据发送到服务器 并且我需要将 PDF 文件与 JSON 中的其他表单数据一起发送 我虽然可以用 base64 从中创建一个字符串 如下所示这个解决方案 https stackoverflow com a
  • apple-app-site-association 从 azure 请求返回为 application/JSON

    我有以下要求 当在 Azure 网站中请求文件的 URL 时 根文件夹中的可用文件必须返回到 application JSON 举例来说 我有一个名为 apple app site association 的文件 它是一个文本文件 在 az
  • 我应该在此 JPQL 查询中包含 unique 吗?

    背景 我在 SO 和许多流行博客中看到了关于必要性的多个答案和问题distinctJPQL 中的关键字JOIN FETCH查询和有关PASS DISTINCT THROUGH查询提示 例如 看这两个问题 使用 JPA 和 Hibernate
  • 在 AWS Glue 中覆盖动态框架中的镶木地板文件

    我使用动态框架在 S3 中写入镶木地板文件 但如果文件已存在 我的程序会附加一个新文件而不是替换它 我用的句子是这样的 glueContext write dynamic frame from options frame table con
  • 如何将子属性的触发器设置为父属性?

    我有一个带有 ToggleButton ExpanderButton 的 TreeView 切换按钮有两个图像 一张用于展开 另一张用于未展开 但是 当我选择 TreeViewItem 时 我用不同的颜色突出显示它 并且我也想更改图像的颜色
  • 字符串的 gnuplot 图

    是否可以传递字符串中的绘图数据 我的意思是做这样的事情 plot 09 13 2010 2263 80 09 14 2010 2500 using 1 2 with lines 可以做类似的事情 set xdata time set tim
  • 如何使用redis发布/订阅

    目前我正在使用node js和redis来构建应用程序 我使用redis的原因是因为发布 订阅功能 该应用程序只是在用户进入用户或离开房间时通知经理 function publishMsg channel mssage redisClien