连接套接字io房间

我正在尝试使login的用户join某个socket.io连接的房间。 根据我在网上发现的任何例子,我似乎已经从客户端发出一些行动来join某个房间。 就像是:

socket.on('connect', function() { socket.emit('join', 'room1'); }); 

Server.js:

 io.sockets.on('connection', function(socket) { socket.on('join', function(room) { socket.join(room); }); }); 

根据大多数教程,它应该工作。

我想要做的是:

 socket.on('connect', function() { socket.join('room1'); }); 

但似乎没有任何工作,因为我从服务器发出的消息不会被客户端捕获。 任何想法,我做错了什么? 一般情况下可以吗?

客户端没有.join()方法。 客房纯粹是一个服务器端构造,客户端对它们一无所知。

你的第一块代码是做事情的理想方式。 您向服务器发送一个devise消息,要求它将套接字连接到一个房间,并在服务器端执行.join()

这应该是你需要随意通过客户端通过任何你想要的房间名称。 只有服务器可以处理分配套接字到一个房间。

服务器:

  io.sockets.on('connection', function(socket) { socket.on('join', function(room) { socket.join(room); }); }); 

客户:

  socket.emit('join', roomNum); 

这很容易实现。 所有你需要做的就是传递一个服务器可以理解的查询参数。

下面的例子没有完全testing,但这个想法将工作。 在本例中,房间名称由客户端上的window.location.href确定。

客户

 // Last segment of path is roomName var roomName = window.location.href.substr(window.location.href.lastIndexOf('/') + 1); var socket = io({ query: { roomName: roomName, }, }); 

服务器

 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); });