【问题标题】:Socket.io emitting events inside other server filesSocket.io 在其他服务器文件中发出事件
【发布时间】:2016-02-17 00:55:17
【问题描述】:

是否可以在其他一些 node.js 服务器文件中发出事件? 就像我正在运行 app.js 以及其他文件一样。

在我拥有的另一个服务器文件中

var io = require('socket.io');

在文件中还有类似这样的内容(我想将此数据 - 价格发送给客户)。

io.emit('price', { price: price});

我得到的错误是 io.emit 不是函数。知道我做错了什么吗?

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    您需要有一个 io 对象连接到您的 Web 服务器(接收传入的 socket.io 连接),然后您需要共享(通过导出或调用函数并传递 io 对象)一个 io 对象与任何其他想要使用它的文件。

    您没有展示太多代码,但假设您在主 express 文件中初始化 socket.io:

    app.js

    var express = require('express');
    var app = express();
    var server = app.listen(8080);
    var io = require('socket.io')(server);
    
    // load msg module and give it the io variable
    var msg = require('./msg.js')(io);
    

    msg.js

    // define module constructor that accepts the io variable
    var io;
    module.exports = function(importIO) {
        io = importIO;
    }
    
    // elsewhere in the module
    io.emit(...)
    

    【讨论】:

    • 谢谢你现在我想我知道应该怎么做。尽管我解决了这个问题并决定只创建全局事件并在我的 socket.io 工作的 app.js 文件中监听这些全局事件,然后自己发出 socket.io。下次我会用你的方法。
    【解决方案2】:

    我改成

    var io = require('socket.io')();
    

    它现在正在工作(没有拉出错误),但仍未将其发送给客户端。

    【讨论】:

    • 这可能不起作用,因为您创建了一个新的 io 对象,该对象未连接到您的 Web 服务器,因此未连接到当前的 webSocket 连接。
    猜你喜欢
    • 2023-04-08
    • 2014-01-30
    • 2015-03-10
    • 2016-07-14
    • 2015-11-01
    • 2013-08-13
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多