0

我正在尝试开发一个 node.js 应用程序,它使用 redis 在后端进程和节点之间传递消息。

我希望能够在收到消息的用户会话(连接会话)指示器中保存。

当用户执行 ajax 查询“IsMessageRecieved”时,我想向他返回我在会话中放置的值。

我试图用下面的代码来做这件事,但没有成功,会话没有被更新。

redisSub.on("message", (channel, connectsid) ->
  sessionStore.get connectsid, (err, session) ->
    if (err || !session)
      return
    else
      session.MessageRecieved = true
      redisSub.unsubscribe('USER_DATA_READY_' + connectsid)
      return
  return
)

你知道可能是什么问题吗?

谢谢,里奥

4

1 回答 1

0

我将您的示例简化为:

var redisSub = require('redis').createClient();
redisSub.subscribe('USER_DATA_READY_abc');
redisSub.on("message", function(channel, connectsid) {
    console.log(channel, connectsid);
});

然后运行 ​​redis-cli 手动发布到频道,值为“abc”。

~ % redis-cli
redis 127.0.0.1:6379> publish USER_DATA_READY_abc abc
(integer) 1

并得到了预期的输出:

USER_DATA_READY_abc abc

这是我的建议

  • 通过添加日志消息确保实际调用了 on("message")。
  • 使用 redis-cli 手动发布现有会话,看看是否会触发回调中的任何结果。

我怀疑没有发布,或者您没有订阅正确的频道。

于 2012-06-01T03:39:36.480 回答