2013-11-17 4 views
1

Я пытаюсь издать уведомление одному клиенту, но испускание не срабатывает вообще, в то время как broadcast.emit работает нормально. Но проблема в широковещательной передаче уведомляет всех клиентов, даже если я поставляю socket.id.Socket.io emit не работает, но широковещательная передача

Кто-нибудь знает, что я сделал не так?

var app = express(); 
var querystring = require('querystring'); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 
var clients = {}; 

io.sockets.on('connection', function(socket) { 
    socket.on('subscribe', function(userID) { 
     clients[userID] = socket.id; 
    }); 

    socket.on('notifyMsg', function(data) { 
     var obj = JSON.parse(data); 
     for(var i=0; i<obj.info.notifyUserIDs.length; i++) { 
      var to = clients[obj.info.notifyUserIDs[i]]; 
      if(to) { 
       // Doesn't work 
       io.sockets.socket(to).emit('notification', data); 

       // Works 
       //io.sockets.socket(to).broadcast.emit('notification', data); 
      } 
     } 
    }); 
}); 

ответ

0

Что вы думаете о том, как хранить сокеты в клиентском хэше и использовать его вот так?

var app = express(); 
var querystring = require('querystring'); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 
var clients = {}; 

io.sockets.on('connection', function(socket) { 
    socket.on('subscribe', function(userID) { 
     clients[userID] = socket; 
    }); 

    socket.on('notifyMsg', function(data) { 
     var obj = JSON.parse(data); 
     for(var i=0; i<obj.info.notifyUserIDs.length; i++) { 
      var to = clients[obj.info.notifyUserIDs[i]]; 
      if(to) { 
       to.emit('notification', data); 
      } 
     } 
    }); 
}); 
+0

Привет, я тоже пробовал это, но испускание просто не срабатывает вообще. Я также попробовать console.log (к), и я получить выход объекта {ID: 'BErkIOeBJP2lsU2OMJxn', пространство имен: {менеджер: {Сервер: [Объект], пространств имен: [Object], розетки: [Круговая ], _events: [Object], настройки: [Object], handshaken: [Object], подключен: [Object], открыт: [Object], закрыт: {}, номера: [Объект], roomClients: [Object], oldListeners: [Object], sequenceNumber: 1714461803, gc: [Object]}, –

+0

Это выглядит хорошо для меня. можете ли вы нюхать сообщение на проводе? Я имею в виду, что сокет выглядит нормально, поэтому, возможно, он что-то куда-то отправляет. –

+0

Извините, как понюхать провод? Возможно ли вам проверить его на вашей стороне, пожалуйста? Моя клиентская сторона - только socket.on ('уведомление', функция (res) { console.log ("browser =" + res) }); –

Смежные вопросы