我正在尝试开发一个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
)

你知道有什么问题吗?
谢谢,
利奥尔

最佳答案

我把你的例子简化为:

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

这是我的建议
通过添加
记录消息。
使用redis cli手动发布现有会话
看看这是否会在回调中触发任何结果。
我怀疑没有发布,或者你没有订阅正确的频道。

10-06 11:48