Вы можете использовать файлы cookie для сопоставления http-запросов с соответствующим соединением сокетов. Допустим, мы используем cookie sesson-id
. Отбросьте этот файл cookie на клиенте по запросу http.
В следующем патче кода перед созданием нового соединения сокета вы присоединяете cookie session-id
к заголовку сокета. Таким образом, вы можете получить доступ к этому session-id
в .on("connection")
мероприятия:
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
л чернилами для пользователей, которые после этих блогов
Спасибо за ваш ответ. Раньше я это делал, но, наконец, я сдался, потому что это было слишком сложно. После этого я выкапываю некоторые интересные переменные. Я могу получить значение сеанса только с помощью «io.sockets.sockets [i] .request.session». Функция PS: io.set устарела, вместо этого следует использовать промежуточное программное обеспечение io.use. – JamesYin