【问题标题】:Creating Rooms in Socket.io在 Socket.io 中创建房间
【发布时间】:2013-10-09 14:55:30
【问题描述】:

我想寻求您的帮助。我在 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。有没有可能的方法来创建房间?

【问题讨论】:

  • 除非room 是一个非负整数(我怀疑),否则你可能不是指rooms = []

标签: javascript node.js sockets socket.io


【解决方案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);
  });
});

【讨论】:

  • 感谢六氰化物。嗯。在我上面的代码中,我将房间存储到房间,以便列出房间。我刚刚编辑了 Michael Mukhin 的 Multi Chatroom,以便将创建的房间添加到列表中。
  • @hexacyanide 你说:You don't need to store this room object anywhere,重启服务器后如何恢复创建的房间?
  • @mahdipishguy 一个房间是在一个套接字加入它时创建的,所以你需要在服务器停止之前存储一个套接字所在的房间,然后让所有套接字重新加入旧房间它们被重新创建。如果这是您必须经常做的事情,那么他们很可能您尝试对房间做的事情不是它的设计目的。
  • 我不知道你为什么坚持使用io.sockets.in(room).emit('event', data);,然后在你的例子中你没有
  • iosocketsin 实例从何而来?这些是在哪里创建的?我刚刚看到我们有 socket 全局变量,你能解释一下吗?
猜你喜欢
  • 2013-10-18
  • 2020-01-10
  • 2013-10-10
  • 2019-06-13
  • 2016-05-08
  • 2019-09-20
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多