【发布时间】:2012-11-24 06:05:33
【问题描述】:
我是 Node.js 和 Express 的菜鸟 :( 我在访问其他模块中的 socket.io 对象时遇到问题。我已经创建了一个全局变量来保存一个套接字对象,但是只要该用户关闭连接,连接不再可用。从技术上讲,我猜连接仍然存在,但出于资源原因我将其删除。
请注意,每次建立连接时,我们都会将该套接字分配给所有其他模块都可以访问的全局变量。
// 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 中作为全局引用使用?
【问题讨论】:
-
您是否正在尝试制作仅处理一个连接的东西?你在发射之前测试 global.socket 的值吗?你得到什么错误?
-
用户一直在创建和连接匹配。问题是这种设计有效,但不是完全证明。当我测试并连接一个套接字时,将其分配给全局,断开并终止套接字,然后尝试在 global.socket 上发射它挂起,最终我得到一个错误,说找不到套接字或其他东西。
-
好吧,我想你没有明白
socket不是唯一的,而是对每个用户都不同的事实。 lortabac 的答案会帮助你 ;) -
格式化问题的好方法!这正是我的问题所在!
标签: node.js sockets express socket.io