【问题标题】:Why isn't my simple socket.io event system working?为什么我的简单 socket.io 事件系统不起作用?
【发布时间】: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 足够的时间来设置所有内容。否则,套接字仍然是未定义的。

我没有收到任何错误消息。该代码无法按我的预期工作。

如果社区能告诉我为什么没有处理“更新”事件,我将不胜感激。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    包含更新模块(update.js)

    试试这个

    效果很好

    module.exports = updates
    var  updates = require('./updates');

    【讨论】:

    • 您是说我错误地将更新模块导入到 app.js 中吗?我证实这不是问题。我可以从 app.js 访问套接字;由于某种原因,事件永远不会得到处理。无论如何,我尝试应用您的解决方案,但事件仍然没有得到处理。此外,我包含的 require('updates.js') 语句实际上并不是我文件中的内容;文件路径实际上指向不同的文件夹,但我更改了 StackOverflow 发布目的的文件路径。
    • 你是说你的客户端socket.io不能处理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多