我正在使用带有角度的socket.io。它工作正常,但我的问题是,它发射到Chrome中打开的所有标签。目前的工作流程是应用程序将在多个选项卡中打开以运行不同的模拟。当我按下按钮(动作)时,它会更新所有打开的选项卡。但是,我想发射到特定的选项卡。我如何设计?我看着stackoverflow和github,但无法让socket.id工作。Socket.io发送到特定客户端的标签
服务器代码
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未定义。我只需要找出将连接隔离到浏览器选项卡的方法。
你在哪里测试你的res.socketid(即console.log语句位于何处)?有一个很好的机会,你正在访问的外部(在套接字连接事件中)之外访问它,甚至在它被设置之前访问它,因此它的未定义 –
正如大卫所说,因为它的异步,socketid没有被定义,如果它被获取之后执行。 – WilomGfx
@DavidTamrazov更新了解释的代码。 –