I am trying to make a logged in user to join a certain socket.io room on connect. According to any examples I found on the net I seem to have emit some action from client to be
This is easily achieved. All you need to do is pass along a query parameter that the server understands.
The following example isn't fully tested, but the idea will work. In this example, the roomname is determined from window.location.href
on the client.
Client
// Last segment of path is roomName
var roomName = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
var socket = io({
query: {
roomName: roomName,
},
});
Server
var io = require('socket.io')(server);
io.on('connection', function(socket) {
var query = socket.handshake.query;
var roomName = query.roomName;
if(!roomName) {
// Handle this as required
}
socket.join(roomName);
});
There is no .join()
method on the client side. Rooms are purely a server-side construct and the client knows nothing about them.
Your first block of code is the desired way to do things. You send the server a message of your design asking it to join the socket to a room and the .join()
is executed on the server side.
This should be what you need. Feel free to pass in whatever room name you want through the client. Only the server can handle assigning a socket to a room.
Server:
io.sockets.on('connection', function(socket) {
socket.on('join', function(room) {
socket.join(room);
});
});
Client:
socket.emit('join', roomNum);