【问题标题】:Using the same redis.createClient() instance for publish and subscribe使用相同的 redis.createClient() 实例进行发布和订阅
【发布时间】:2012-08-15 07:17:42
【问题描述】:

我正在使用 redis 在 socket.io 客户端之间发布和订阅消息,当客户端连接到服务器 (io.sockets.on('connection', function(socket){...});) 时,我正在使用 redis.createClient() 创建一个 subscribe 变量,然后使用订阅功能为客户端订阅频道。

我的问题是它是否有权使用相同的订阅变量来执行发布操作?或者使用redis.createClient() 创建另一个实例来发布消息很重要,所以我将有2 个实例,一个用于发布,一个用于订阅...

谢谢

【问题讨论】:

    标签: node.js redis socket.io


    【解决方案1】:

    来自Redis docs

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

    因此,您需要两个客户端,一个用于订阅,一个用于发布(可能还有其他命令)。

    【讨论】:

    • 谢谢,您的意思是我可以使用同一个客户端订阅多个频道?我说的对吗?
    • 是的;您将获得消息发布到的频道名称,作为message 事件处理程序的第一个参数。
    • 这是一个可以帮助某人的要点:gist.github.com/felipekm/c18a34699222e4140cab
    【解决方案2】:

    订阅变量是指 redis.createClient() 返回的对象?如果是,从文档中,When a client issues a SUBSCRIBE or PSUBSCRIBE, that connection is put into "pub/sub" mode. At that point, only commands that modify the subscription set are valid. 是的,您不能发布到您首先订阅的客户端,这将发出 Error: Connection in pub/sub mode, only pub/sub commands may be used 错误。

    您确实需要为订阅创建一个客户端(可以即时修改)和一个要发布的客户端。当客户的订阅免费时,您将恢复正常状态。

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多