我已经将我的项目看作如下所示
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 对象。
知道如何克服这个问题?
感谢。
答案 0 :(得分:0)
您的app.js
文件是初始化套接字服务器的文件,因此您必须在script.js
文件中要求它:
var io = require('./io');
require('./app');
...
io.emit(event, msg);
BTW,节点缓存都需要,所以你怀疑节点"再次运行"您的io.js
文件实际上不是真的 - 第二次调用require('./io')
的唯一方法是返回您的io
实例引用。