【发布时间】:2019-07-31 04:12:48
【问题描述】:
我在使用 socket.io 进行一些事件处理时遇到了问题。出于某种原因,以下代码 sn-p 不处理事件“更新”或与此相关的任何事件。让我解释一下情况。
我创建了一个名为 updates.js 的文件来创建一个名为 socket_8888 的 socket.io 套接字变量,该变量绑定到端口 8888。然后我使用 module.exports 使该套接字变量可用于任何其他导入 updates.js 的文件使用需要('updates.js')。我以这种方式构建了我的应用程序,因为我需要从几个不同的文件中发出事件。
在 app.js 中:
var updates = require('updates.js');
setTimeout(function() {
updates.regular.on("update", function () {
console.log("Updated.");
})
}, 1000);
setTimeout(
function () {
console.log(updates.regular.eventNames()); // Verifying that there is actually a listener bound to the socket -> prints ['update']
updates.regular.emit("update", 100)
}, 1500);
在updates.js中:
var io = require("socket.io");
var socket_8888 = io(8888);
var updates = {
regular: socket_8888
};
module.exports = updates;
但是,一些简单的测试发现事件没有得到处理,我真的不知道为什么。在我使用“node www”运行应用程序后,“更新”一词应该打印一秒半,但它没有。
我开始做这个简单测试的原因是因为我试图恢复我的旧网站,但几年后,API 更新使我的很多代码变得无用。所以我正在努力重建。我不想在服务器上的不同文件之间发送事件。我只在本地测试事件,因为事件没有触发到浏览器客户端。出于这个原因,我决定使用这个简单的测试进行调查,结果发现事件甚至无法在实际服务器上发出/收听,更不用说在完全不同的网络上的客户端上处理了。
我已经验证了监听器实际上是绑定到套接字的。但是,我不知道如何检查套接字是否真的在发出“更新”事件。
我已经编写了只在一秒钟后绑定的侦听器,因为在应用程序启动的那一刻尝试绑定并没有给 Express 足够的时间来设置所有内容。否则,套接字仍然是未定义的。
我没有收到任何错误消息。该代码无法按我的预期工作。
如果社区能告诉我为什么没有处理“更新”事件,我将不胜感激。
【问题讨论】: