我有一个模块
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.emit
、broadcast
和 io.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/