在 Socket.io 中创建房间

IT技术 javascript node.js sockets socket.io
2021-03-08 05:02:34

我想请求你的帮助。我在 socket.io 的客户端遇到了困难,我想在我的客户端调用此代码以在 socket.io 中创建一个房间:

var rooms = [];
socket.on('create', function (roomname) {
    rooms[room] = room;
    socket.room = roomname;
            socket.join(roomname);
    subscribe.subscribe(socket.room);
});

我不知道这是否正确,如果不正确,请帮助我纠正这些人。我不是节点 js 和套接字的专业人士,但我已经阅读了他们的 wiki。有没有办法创造空间?

1个回答

Socket.IO 中的房间不需要创建,当一个套接字加入它时就会创建一个。它们在服务器端加入,因此您必须使用客户端指示服务器。

socket.on('create', function (room) {
  socket.join(room);
});

在上面的示例中,创建了一个房间,其名称在变量 中指定room您不需要将此房间对象存储在任何地方,因为它已经是io对象的一部分然后,您可以将房间视为其自己的套接字实例。

io.sockets.in(room).emit('event', data);

所以要从客户端创建一个房间,它可能是这样的:

// client side code
var socket = io.connect();
socket.emit('create', 'room1');

// server side code
io.sockets.on('connection', function(socket) {
  socket.on('create', function(room) {
    socket.join(room);
  });
});
我不知道你为什么坚持使用io.sockets.in(room).emit('event', data);,然后在你的例子中你不
2021-05-01 05:02:34
而来自哪里iosocketsin实例?这些是在哪里创建的?,我只看到我们有 socket全局变量,你能解释一下吗?
2021-05-06 05:02:34
@hexacyanide 你说:You don't need to store this room object anywhere重启服务器后如何恢复创建的房间?
2021-05-09 05:02:34
@mahdipishguy 当套接字加入房间时会创建一个房间,因此您需要在服务器停止之前存储套接字所在的房间,然后让所有套接字重新加入旧房间以重新创建它们。如果这是你必须经常做的事情,他们很可能你试图对房间做的事情不是它的设计目的。
2021-05-09 05:02:34
谢谢六氰。嗯。在我上面的代码中,我将房间存储到房间,以便列出房间。我刚刚编辑了 Michael Mukhin 的Multi Chatroom,以便将创建的房间添加到列表中。
2021-05-13 05:02:34