我走了幾步到socket.io。沒有req就很難編碼,因爲我不知道對誰的迴應。如何在特定事件後通過socket.io將消息發送到特定的登錄用戶?
對於這個問題。我的網站有一些博客。當博客更新時,我需要「告訴」那些關注博客的用戶,博客已經更新。問題是我不知道巫婆跟隨用戶在線,我不知道如何發射事件給他們只有後面的用戶ID。
有人能給我一些提示嗎?不需要任何特定的代碼。
我走了幾步到socket.io。沒有req就很難編碼,因爲我不知道對誰的迴應。如何在特定事件後通過socket.io將消息發送到特定的登錄用戶?
對於這個問題。我的網站有一些博客。當博客更新時,我需要「告訴」那些關注博客的用戶,博客已經更新。問題是我不知道巫婆跟隨用戶在線,我不知道如何發射事件給他們只有後面的用戶ID。
有人能給我一些提示嗎?不需要任何特定的代碼。
您可以使用cookie將http請求映射到相應的套接字連接。可以說我們正在使用Cookie sesson-id
。 通過http請求在客戶端上放置此cookie。
在下面的代碼修補程序中,在創建新的套接字連接之前,您會將session-id
cookie附加到套接字標頭。這樣,您就可以在.on("connection")
事件訪問此session-id
:
var io = require("socket.io");
sio = io.listen(server);
sio.set("authorization", function (data, accept) {
if (data.headers.cookie) {
data.cookie = cookie.parse(data.headers.cookie);
data.headers.sessionID = data.cookie["session-id"];
}
accept(null, true);
});
接下來,存儲相關聯的session-id
插座連接對象:
var sockets = {}; // store all socket connections here
sio.sockets.on("connection",connected);
function connected(socket){
var sessionID = socket.handshake.headers.sessionID;
sockets[sessionID] = socket;
}
現在,每當你想發出與特定插座事件http請求:
function dummyReq(req,res){
var session_id = // get cookie from req
//after certain actions
sockets[session_id].emit("dummy-event","dummy-message");
}
在你的情況下,你將不得不發射所有插座事件session-id
l簽署給用戶誰是以下這些博客
您可以撥打join
到插座訂閱指定通道:
io.to('some room').emit('some event');
要:
io.on('connection', function(socket){
socket.join('some room');
});
,然後簡單地廣播或發射時使用to
留下頻道,您需要致電leave
:
io.on('disconnect', function(socket){
socket.leave('some room');
});
感謝您的回覆。我雖然這樣,但最後,我放棄了,因爲這太複雜了。之後,我挖掘出一些有趣的變數。我可以通過「io.sockets.sockets [i] .request.session」獲得會話值。 PS:io.set函數已被棄用,我們應該使用io.use中間件。 – JamesYin