2015-11-16 4 views
0

Я делаю несколько шагов в socket.io. Очень сложно кодировать без req, потому что я не знаю ответа на кого.Как отправлять сообщения socket.io конкретным зарегистрированным пользователям после определенных событий?

За этот вопрос. На моем веб-сайте есть блоги. Когда блоги обновляются, мне нужно «рассказать» пользователям, которые следили за блогами, которые были обновлены в блогах. Проблемы в том, что я не знаю, ведьма следит за тем, чтобы пользователи были в сети, и я не знаю, как передавать им события только с последующим идентификатором пользователя.

Может кто-нибудь дать мне несколько советов? Нет необходимости в каком-либо конкретном коде.

ответ

0

Вы можете использовать файлы 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 л чернилами для пользователей, которые после этих блогов

+0

Спасибо за ваш ответ. Раньше я это делал, но, наконец, я сдался, потому что это было слишком сложно. После этого я выкапываю некоторые интересные переменные. Я могу получить значение сеанса только с помощью «io.sockets.sockets [i] .request.session». Функция PS: io.set устарела, вместо этого следует использовать промежуточное программное обеспечение io.use. – JamesYin

0

Вы можете позвонить join подписаться сокет к данному каналу:

io.on('connection', function(socket){ 
    socket.join('some room'); 
}); 

А затем просто использовать to при вещании или излучающие:

io.to('some room').emit('some event'); 

Для оставьте канал, необходимо позвонить по телефону leave:

io.on('disconnect', function(socket){ 
    socket.leave('some room'); 
}); 
Смежные вопросы