在使用socket.io进行一些事件处理时遇到了问题。由于某些原因,以下代码段不处理事件“更新”或与此相关的任何事件。让我解释一下情况。
我创建了一个名为updates.js的文件,以创建一个名为socket_8888的socket.io套接字变量,该套接字变量绑定到端口8888。然后,我使用module.exports使该套接字变量可用于导入更新程序的所有其他文件。使用require('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;
但是,一些简单的测试发现事件没有得到处理,我真的不知道为什么。在我使用“节点www”运行应用程序后,“更新”一词应打印一两个半,但不是。
我开始进行此简单测试的原因是因为我试图恢复我的旧网站,但是几年后,API更新使我的许多代码变得无用。所以我正在尝试重建。我不尝试在服务器上的不同文件之间发送事件。我只在本地测试事件,因为事件没有触发浏览器客户端。因此,我决定使用此简单测试进行调查,结果发现事件甚至无法在实际服务器上发出/监听,更不用说在整个不同网络上的客户端上进行处理了。
我已经验证了侦听器实际上已绑定到套接字。但是,我不知道如何检查套接字是否真正发出了“更新”事件。
我已将侦听器写为仅在一秒钟后绑定,因为在应用程序启动时尝试绑定并没有给Express足够的时间来设置所有内容。否则,套接字仍将是未定义的。
我没有收到任何错误消息。该代码只是无法正常工作。
如果社区能够告诉我为什么未处理事件“更新”,我将非常感谢。
答案 0 :(得分:0)
包括更新模块(update.js)
尝试一下
完美工作
module.exports = updates
var updates = require('./updates');