gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:14:21 25 4
gpt4 key购买 nike

目前我有一个getter/setter socket模块如下

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(...);

看起来有点做作,有没有更好的方法呢?

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

最佳答案

有很多共享套接字的选项,但了解更多有关您的模块将要做什么的信息会有所帮助。在不知道更多信息的情况下,我建议您通过正在调用的函数将套接字传递给模块,而不是尝试使用一些共享状态。

如果您需要使用共享状态(您正试图向由套接字消息以外的其他东西触发的特定用户发送消息),那么我建议坚持使用已建立的 session 框架并只保留套接字 ID。您只需使用 id 即可获得正确的套接字。

请参阅此答案以了解如何将 socket.io 与 session 一起使用:socket.io and session?

添加更多细节,我会修改我的答案。

更新

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

关于node.js - 在模块之间传递 Socket.IO 套接字的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10291218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com