我正在使用帶有角度的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更新瞭解釋的代碼。 –