【问题标题】:Debugging why socket.on is not being hit调试为什么 socket.on 没有被击中
【发布时间】:2019-04-04 19:38:20
【问题描述】:

此问题发生在我的应用程序的客户端。 我遇到了一个问题,我的 Node 应用程序上没有命中 socket.on 事件。这通常发生在客户端第一次加载站点时。加载时,选项卡通常具有在 Javascript 中动态生成的数据,但是由于未命中 socket.on 事件,因此该内容未加载,导致选项卡为空白(基本 Pug/Jade 文件仍在呈现- 只是没有动态内容)。刷新页面通常可以解决问题,并且套接字会再次开始接收数据。

没有直接的错误信息被输出,socket.on 事件只是没有被命中。一旦页面重新加载并且不是 100% 的时间发生,这似乎也会自行解决。

这更不寻常,因为在调试模式下运行我的节点服务器时,它显示了 socket.io-parser 编码数据和 socket.io-client 写入数据,这意味着它正在发出,只是没有由我客户端的 socket.on 接收。

注意这里已经简化了

io.sockets.on('connection', function (client) {
    sendExampleData();
});
function sendExampleData() {
    mysqlFunc.getOrderData(function(rows){
        io.emit('example_data', rows);
    })
}
socket.on('example_data', function (rows) {
    console.log(rows);
}

我希望在页面加载时发出数据,并且 socket.on 事件将接收此数据,准备好进行处理。目前,虽然不是每次都发生,但 socket.on 没有被击中,数据也没有被抓取。

在调试模式下运行服务器时没有什么异常,任何想法都会非常有帮助。如果有任何其他有助于调试此问题的信息,请告诉我。

提前致谢!

【问题讨论】:

  • 发射:io.emit('example_data'),收听:socket.on('solvitt_data'),正常吗?
  • 只是我试图简化代码,现在编辑,为那个道歉!
  • socket.io 备忘单很容易理解。 socket.io/docs/emit-cheatsheet 在您发出事件之前(无论是服务器还是客户端),您都应该等待连接事件。您可以编辑您的问题:这是在服务器/客户端吗?
  • 嗨,马克,感谢您的回复。问题出在客户端,没有呈现数据。我认为问题不在于发出事件,而在于 on 事件。我将编辑问题以更清楚地了解服务器/客户端。

标签: javascript node.js express socket.io


【解决方案1】:

我终于设法找出问题所在。 我的 socket.on 事件侦听器在我的 $(document).ready 中,并且在第一页加载时没有被调用。我假设事件侦听器没有足够早地定义,因此当我在连接时 socket.emit'd 事件侦听器实际上并没有加载。

我将 $(document).ready 中的所有逻辑移出,并将我的事件侦听器移到连接事件中(感谢 Marc 的提示)。

socket.on('connect', function(){
    socket.on('data_1', funcOne);
    socket.on('data_2', funcTwo);
    socket.on('data_3', funcThree);
    socket.on('data_4', funcFour);
    socket.on('data_5', funcFive);
});

这解决了问题,现在每次页面加载时都会点击 socket.on。 感谢您的帮助,希望这可以帮助遇到此问题的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多