【发布时间】:2017-01-07 04:12:22
【问题描述】:
我的项目如下所示
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 对象。
知道如何克服这个问题吗?
谢谢。
【问题讨论】:
-
这看起来与您之前的问题几乎相同:stackoverflow.com/questions/39196031/…。正如我在那里所说,当您实际上有一些成功的 socket.io 连接连接到您的服务器时,
io.sockets.sockets将是一个连接的套接字数组。如果你说数组是空的,那么你必须向我们证明/告诉我们为什么你认为实际上有连接的套接字,但是数组是空的。我不相信有连接的套接字并且数组是空的。 -
如果您在scripts.js 中使用
console.log(io.sockets.connected),那么它可能是在实际上有任何连接的套接字之前。您没有向我们展示实际代码,因此我们无法帮助您解决问题的重要部分。这现在看起来像是您之前的问题的重复,您只是在合并了其他答案中的一些内容后才决定再次发布,但仍然没有解决您检查io.sockets.connected时的相关问题。 -
其余的解释在于您没有向我们展示的代码。 “在节点服务器启动后正在运行 script.js”是什么意思?如何/何时运行?你确定只有一个 io.js 文件吗?向我们展示加载 scripts.js 的实际代码,并向我们展示 scripts.js 中您没有得到正确答案的实际代码。你只是没有向我们展示足够的东西,我们无法进一步帮助你。
标签: javascript node.js asynchronous socket.io server