【问题标题】:Cannot call redis.get() function inside websocket ping无法在 websocket ping 中调用 redis.get() 函数
【发布时间】:2015-06-16 20:26:32
【问题描述】:

我的以下 node.js 代码运行良好,但我似乎无法让 console.log 执行 - 可能是什么原因? redis 在范围内,redis.get() 在较早的位置工作正常(所以我知道语法很好).. 不执行的 console.log 用“# cannot execute this line”行注释代码。将不胜感激任何关于如何调试的指针..

程序打印出“pong”和“pong2”,所以我知道它正在响应 ping。

var WebSocketServer = require('ws').Server
var wss = new WebSocketServer({
    port: 8080
});
var redis = redis_server.createClient(6379, 'localhost');

wss.on('connection', function(ws) {
    ws_auth(redis, ws, function(authresult, uid) {
        if (!authresult) {
            ws.close();
            return;
        }
        ws.on('ping', function() {
            console.log('pong')
            var cookie = ws.upgradeReq.headers.cookie;
            cookie_json = JSON.parse(cookie);
            redis.get('session:' + cookie_json.sessionid, function(err, value) {
                console.log(getDateTime() + ': value ' + value + " session exits");#cannot execute this line
            });
            ws.pong();
            console.log('pong2')
        });
    });
});

【问题讨论】:

  • 是否有客户端向您的服务器发送ping 消息以触发第一个console.log() 语句?您可能想阅读以下内容:stackoverflow.com/a/10586583/816620.
  • @jfriend00 谢谢 - 程序打印出“pong”,所以我知道它正在响应 ping。
  • 那么也许你应该在你的问题中澄清你问的是console.log()
  • @jfriend00 我做了 - 代码说“# cannot execute this line” - 但我会将它添加到问题正文而不是代码中。
  • 什么是ws_auth()?它正在传递redis 句柄,因此它可能正在对它做一些事情,导致redis.get() 以某种方式失败。

标签: node.js websocket redis


【解决方案1】:

也许 JSON.parse 抛出了一个被吞掉的错误。确定 reddit 服务器是否正在接收事件是很有价值的。

【讨论】:

  • 感谢您的回复!我更新了代码以反映打印 pong 和 pong2 (表明它正在通过代码)。 cookie_json.sessionid 也正确评估(我用'name'替换了整个键,没有区别。我还在监控模式下运行了redis,我看到字符串在redis中设置,但是.js程序的命令永远不会到达redis 服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2020-03-07
  • 2013-06-21
  • 2019-06-02
相关资源
最近更新 更多