javascript - 使用 Socket.io 将套接字传递给 Node.js 中的模块

标签 javascript node.js websocket socket.io

我有一个模块

var exports = module.exports = {};

exports.refresh = function (msg) {
    socket.emit('refresh', { message: msg });
}

exports.lock = function (msg) {
    socket.emit('lock', { message: msg });
}

在我定义的 server.js 中

var io = require("socket.io").listen(server);

并调用模块

var period = require('./server/functions/period.js');

如何将 Socket 传递给模块 (period.js),以便我可以访问套接字方法,例如 socket.emitbroadcastio.sockets.emit.

最佳答案

有几种方法可以解决这个问题。这取决于您要如何使用实际模块。每个套接字只有一个实例,或者每个套接字只有一个实例。我建议你让你的模块返回一个构造函数而不是一个对象字面量,如下所示:

module.exports = function(socket) {
    var socket = socket;

    this.refresh = function (msg) {
        socket.emit('refresh', { message: msg });
    }

    this.lock = function (msg) {
        socket.emit('lock', { message: msg });
    }

}

然后您可以创建包含实际套接字的新对象。

var Period = require('./server/functions/period.js'),
    period = new Period(socket);

一个解决方案可能是对每个连接 socket 都这样做。

var periodModule = require('./server/functions/period.js'),

io.on('connection', function(socket){
    var period = new periodModule(socket);

    //make a call
    period.refresh();
});

您也可以将 io 对象传递给您的模块以获取广播接口(interface)。

 module.exports = function(socket, io) {
    var socket = socket,
        io = io;

    this.broadcastSomething = function(..) {
        io.emit('data', { data: 'data'});
    }

    this.refresh = function (msg) {
        socket.emit('refresh', { message: msg });
    }

    this.lock = function (msg) {
        socket.emit('lock', { message: msg });
    }

}

关于javascript - 使用 Socket.io 将套接字传递给 Node.js 中的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469885/

相关文章:

javascript - 在 Prototype 中使用自己的 AJAX 请求回调方法

node.js - 如何导出和导入类型定义?

javascript - Sequelize 如何在单个表中选择子项的子项?

node.js - Azure 诊断日志大小限制

java - Server EndPoint for WebSocket Java API 中的 volatile 变量?

amazon-web-services - 如何使 AWS Lambda 通过 Websocket 与 Neptune 可靠地工作?

ruby-on-rails - 如何使用 Rails 连接到 websocket API?

javascript - 通过 Lodash 从数组创建对象映射

javascript - Express+pug 中的动态 URL

javascript - Angular 的无限摘要问题