此问题发生在我的应用程序的客户端。 我遇到了一个问题,那就是在我的Node应用程序上未命中socket.on事件。通常在客户端首次加载网站时发生。加载时,选项卡通常具有在Javascript中动态生成的数据,但是由于未命中socket.on事件,因此未加载此内容,导致选项卡为空白(基本Pug / Jade文件仍在渲染-只是没有动态内容)。刷新页面通常可以解决该问题,套接字会再次开始接收数据。
没有正在输出的直接错误消息,只是未命中socket.on事件。页面重新加载并且没有100%的时间出现后,这似乎也可以解决。
这甚至更不寻常,因为在调试模式下运行我的Node服务器时,它会显示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并没有被点击,数据也没有被捕获。
在“调试”模式下运行服务器时,没有什么异常之处,任何想法都将非常有帮助。如果还有其他信息对帮助调试此问题有用,请告诉我。
谢谢!
答案 0 :(得分:0)
我终于设法弄清了问题所在。 我的socket.on事件侦听器位于我的$ {document).ready内部,未在第一页加载时调用。我假设事件监听器没有足够早地定义,因此当我在连接上进行socket.emit时,事件监听器实际上并未加载。
我移出了$(document)内部的所有逻辑。准备就绪,并将事件侦听器移至连接事件(感谢技巧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。 感谢您的帮助,希望这可以对遇到此问题的人有所帮助!