异步socket.io模块在不同文件和脚本之间共享

时间:2016-08-30 18:42:20

标签: javascript node.js asynchronous socket.io server

我已经将我的项目看作如下所示

io.js

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

var socketioJwt = require('socketio-jwt');
var jwtSecret = require('./settings').jwtSecret;

io.set('authorization', socketioJwt.authorize({
  secret: jwtSecret,
  handshake: true
}));

io.on('connection', function(socket) {

});

module.exports = io;

应用,JS

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

...

var server = http.createServer(app);

io.attach(server);

server.listen(33666);

现在我想在另一个脚本中使用套接字,以便向连接的用户发送消息,如下所示:

的script.js

var io = require('./io');
...
io.emit(event, msg);

我的问题是,当我在 script.js 中记录io.sockets.connected时,它总是以空对象的形式返回。我已经缩小了我的问题,我相信这种情况正在发生,因为在 script.js 中需要 io 模块时, io.js 正在运行再次,因此我实例化一个新的 io 对象。 知道如何克服这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

您的app.js文件是初始化套接字服务器的文件,因此您必须在script.js文件中要求它:

var io = require('./io');
require('./app');
...
io.emit(event, msg);
BTW,节点缓存都需要,所以你怀疑节点"再次运行"您的io.js文件实际上不是真的 - 第二次调用require('./io')的唯一方法是返回您的io实例引用。