gpt4 book ai didi

javascript - Socket.io 在选项卡中向特定客户端发送

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:56 25 4
gpt4 key购买 nike

我正在使用带 Angular socket.io。它工作正常,但我的问题是它会发送到 Chrome 中打开的所有选项卡。当前的工作流程是应用程序将在多个选项卡中打开以运行不同的模拟。当我按下按钮(操作)时,它会更新所有打开的选项卡。但是,我想发送到特定选项卡。我该如何设计呢?我查看了 stackoverflow 和 github,但无法让 socket.id 工作。

服务器代码

app.use(function(req, res, next) {
var socketid = ''
socketio.sockets.on('connection', function(socket) {
socketid = socket.id

res.socketid = socketid
//
});
res.socketio = socketio;
next();
});

console.log('sockrt ' + res.socketid)
res.socketio.emit('pyr', output) //res.socketid is undefined

已更新

app.js

app.use(function(req, res, next) {
var socketid = ''
socketio.sockets.on('connection', function(socket) {
socketid = socket.id

res.socketid = socketid
//
});
res.socketio = socketio;
next();
});

py.controller.js(API端点)

export function index(req, res) {
console.log('sockrt ' + res.socketid)
res.socketio.emit('pyr', output)

};

端点正在工作,socket.io正在工作,但socket.id未定义。我只需要找到一种方法来隔离与浏览器选项卡的连接。

最佳答案

好的,经过一番尝试和错误后,我能够解决这个问题。纵观SO,有一些基于express和socket之间共享的express session 的解决方案。虽然它有效,但我无法隔离各个选项卡。我的用例是将其设置为一个可以跨浏览器在多个实例中使用的应用程序(将其视为报价引擎)。以下解决方案对我有用。

服务器代码

  socketio.on('connection', function(socket) {
socket.address = `${socket.request.connection.remoteAddress}:${socket.request.connection.remotePort}`;

// USED TO SET THE SOCKET ID FOR THE REQUEST
socket.emit('initialize', socket.id)


socket.connectedAt = new Date();
}

客户端代码
在 Angular 中,我设置了一个初始化事件来存储选项卡的特定套接字 ID

    this.socket.on('initialize', socketid => {
console.log(socketid)
this.socketid = socketid
})


当请求发送到express时,我将socketid作为 header 发送

return this.$http({
method: 'POST',
withCredentials: true,
host: '127.0.0.1',
data: sim_data,
port: 3000,
responseType: "arraybuffer",
headers: {
"X-socketid": this.socketid
},
url: '/api/blah'
})

服务器代码
最后,当express处理POST或get时,我从Header发送到socketid

    // GET SOCKET ID FROM HEADER
var socket_id = req.headers['x-socketid']

if (typeof socket_id !== 'undefined' && socket_id) {
var io = req.app.get('io')
io.sockets.connected[socket_id].emit('pyr', output)
}

我的下一步是将其与用户授权集成。

关于javascript - Socket.io 在选项卡中向特定客户端发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339657/

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