我对Node.js和Express不太熟悉 :( 我在访问其他模块中的socket.io对象时遇到了问题。我已经创建了一个全局变量来保存socket对象,但是当用户关闭连接时,该连接将不再可用。从技术上讲,我想这个连接仍然存在,但为了资源原因,我删除了它。
请注意,每当建立连接时,我们将该socket分配给全局变量,全局变量可以被所有其他模块访问。
// App.js
var io = require('socket.io').listen(server);
var sessionsConnections = {};
io.sockets.on('connection', function (socket)
{
global.socket = socket;
sessionsConnections[socket.id] = socket;
.....
}
socket.on("disconnect", function()
{
delete sessionsConnections[socket.id];
});
// Match.js
global.socket.emit('lobby:createMatch', data);
如果上一次分配给全局的连接关闭了,Match.js 将会出现问题。此时,Match.js 是唯一需要那个 socket.io 引用的模块。Match.js 有许多导出项,用于处理事件、发出更改和渲染视图。
是否有任何建议来处理这个问题?是否可以实例化一个初始套接字连接,以在 App.js 中存在作为全局引用的目的?
socket
不是唯一的,而是每个用户都不同。Lortabac 的答案会帮助你的 ;) - Arnaud Rinquin