Reputation: 1872
I'm using Node.js with ws(a socket library) and I'm having a little trouble with finding the socket of a specific user.
when the user connects to my socket server, I'm supposed to keep his socket objct in a big massive object by his userID or socketID like this:
var bigMassiveObject = {};
ws.on('connection', function(socket){
var userID //somehow get the userID
bigMassiveObject[userID] = socket;
// to find the socket
socket = bigMassiveObject[userID];
socket.send("hi");
})
so that later I can send him message by that ID, but isn't it better to just keep his socketID? this way we are not storing all the socket, but only the ID and then somehow(which I don;t know) send him message by that ID
this is what i'm looking for:
var smallObject = {};
ws.on('connection', function(socket){
var userID //somehow get the userID
smallObject[userID] = socketID;
// to find the socket
var socket = generateSocketObjectBySocketID(socketID);
socket.send("tada!");
})
so the question is, is there anyway to generate the socket, by the socketID(or useID)? so that we wouldn't be storing all these big socket objects in memory and there wouldn't be any memory leakage too :)
Upvotes: 0
Views: 646
Reputation: 1456
Simply,
This is what you need :
io.to(socket.id).emit("event", data);
whenever a user joined to the server,socket details will be generated including ID.This is the ID really helps to send a message to particular people.
first we need to store all the socket.ids in array,
var people={};
people[name] = socket.id;
here name is the reciever name. Example:
people["trojan"]=2387423cjhgfwerwer23;
So, now we can get that socket.id with the reciever name whenever we are sending message:
for this we need to know the recievername.You need to emit reciever name to the server.
final thing is:
socket.on('chat message', function(data){
io.to(people[data.reciever]).emit('chat message', data.msg);
});
Hope this works well for you.!!Good Luck
Upvotes: 1