2016-03-25 6 views
0

Ich arbeite an einer einfachen sitzungsbasierten App, die von einem Sitzungscode in der URL geteilt wird. Ich beschloss, eine kürzere benutzerfreundliche eindeutige ID für jeden Client zu generieren und zuzuweisen, der sich mit einem Socket verbindet, und der Client, der eine Sitzung erstellt, verursacht, dass ein socket.io-Raum mit seiner ID erstellt wird.Gibt es eine alternative Möglichkeit, eine private Nachricht mit Socket.io (1.0+) zu senden?

Ich erkannte erst später, dass der private Messaging-Mechanismus in socket.io darauf angewiesen war, dass jeder Client einem Raum zugewiesen wurde, der durch seine ID benannt wurde. Dies bedeutet, dass, weil mein Raum für eine Sitzung nach der Socket-ID des Erstellers benannt wird, der Benutzer .to() diesen Client nicht anmeldet, sondern alle Clients, die diesem Raum zugewiesen sind.

Ich könnte das auf eine Art und Weise beheben, die ein Re-Design erfordern würde, aber zuerst wollte ich fragen, ob es eine alternative Möglichkeit gibt, eine Nachricht über seine ID an einen bestimmten Client zu senden.

Antwort

0
/*create an array of clients, where key is the name of user and value is its unique socket id(generated by socket only, you do not have to generate it) during connection.*/ 
var clients = {}; 
clients[data.username] = { 
"socket": socket.id 
}; 
//on server side 
socket.on('private-message', function(data){ 
    io.sockets.connected[clients[data.username].socket].emit("add-  message", data); 
}); 
//on client side 
socket.emit("private-message", { 
"username": userName, 
"content": $(this).find("textarea").val() 
}); 
socket.on("add-message", function(data){ 
notifyMe(data.content,data.username); 
}); 
Verwandte Themen