什么是在模块之间传递Socket.IO套接字的正确方法?

目前我有一个getter / setter套接字模块,如下所示

var socket; module.exports.getSocket = getSocket; module.exports.setSocket = setSocket; function getSocket() { return socket; } function setSocket(sock) { if (undefined == socket) socket = sock; } 

在app.js中我设置如下

 var sio = require('./lib/socket'); var io = require('socket.io').listen(app); io.sockets.on('connection', function (socket) { sio.setSocket(socket); }); 

在我的模块中,我使用如下

 sio = require('./lib/socket'); socket.getSocket().broadcast.emit(...); 

有没有更好的方法来做到这一点似乎有点人为的做法呢?

编辑:我想要一个通用的解决scheme,发射一个消息,这是不是由客户端套接字启动的问题。 例如,假设我从外部来源检索股票价格,并希望在价格更新时触发事件。 由于它不是客户端启动的,我怎样才能访问套接字? 或者,也可以让我们说,我希望发出一个套接字消息响应一个POST请求。 我再次不知道如何访问套接字。

有许多共享套接字的选项,但它有助于更​​多地了解你的模块将要做什么。 不知道更多,我会build议你通过你调用的函数传递套接字到模块,而不是试图使用一些共享状态。

如果你需要使用一个共享状态(你试图发送消息给特定的用户,而不是套接字消息触发),那么我会build议坚持一个build立的会话框架,只是坚持套接字ID。 只需使用id即可获得正确的套接字。

看到这个答案如何使用socket.io会话: socket.io和会话?

添加一些细节,我会修改我的答案。

UPDATE

如果您只是试图向连接的所有人广播,则不需要套接字句柄。 从任何引用socket.io的模块,你可以调用io.sockets.emit('stuff')