session - Node.js:无法在 Redis pubsub 事件中更新 session ?

标签 session node.js redis publish-subscribe

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

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

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

我试着用下面的代码来做,但没有成功, session 没有被更新。

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手动发布到 channel ,值为“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 手动发布现有 session 看看这是否会在您的回调中触发任何结果。

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

关于session - Node.js:无法在 Redis pubsub 事件中更新 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836143/

相关文章:

mysql - 风 sails : How to define association table mysql many-many

java - 如何使用redisson客户端获取redis集群中key的值

ruby-on-rails - 如何更改resque的默认 sleep 时间(5s)?

java - 如何打开新的 Web 浏览器而不是在单击与父窗口具有单独的 http session 的链接时弹出

session 突然不起作用

php - 为什么在 Session_Start() 之前不能输出任何内容?

node.js - puppeteer headless chrome 是否可以在 Azure 应用服务的 Windows 容器中工作?

node.js - OpenAI API错误: "OpenAIApi is not a constructor"

ruby-on-rails - Rails Resque 更改 worker 限制?

java - 以编程方式使 Java Web 应用程序重新启动时的所有 session 过期