Por fin luego de tanto batallar hemos dado con la contestación de este atascamiento que tantos lectores de este sitio web han tenido. Si tienes algún detalle que aportar no dudes en compartir tu información.
Solución:
Esto debería ser lo que necesitas. Siéntase libre de pasar el nombre de la habitación que desee a través del cliente. Solo el servidor puede manejar la asignación de un socket a una habitación.
Servidor:
io.sockets.on('connection', function(socket)
socket.on('join', function(room)
socket.join(room);
);
);
Cliente:
socket.emit('join', roomNum);
No hay .join()
método en el lado del cliente. Las habitaciones son puramente una construcción del lado del servidor y el cliente no sabe nada sobre ellas.
Su primer bloque de código es la forma deseada de hacer las cosas. Envías al servidor un mensaje de tu diseño pidiéndole que una el socket a una habitación y el .join()
se ejecuta en el lado del servidor.
Esto se logra fácilmente. Todo lo que necesita hacer es pasar un parámetro de consulta que el servidor entienda.
El siguiente ejemplo no está completamente probado, pero la idea funcionará. En este ejemplo, el nombre de la habitación se determina a partir de window.location.href
en el cliente
Cliente
// Last segment of path is roomName
var roomName = window.location.href.substr(window.location.href.lastIndexOf('/') + 1);
var socket = io(
query:
roomName: roomName,
,
);
Servidor
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);
);
Más adelante puedes encontrar las aclaraciones de otros usuarios, tú además eres capaz dejar el tuyo si dominas el tema.