【问题标题】:How to force multiple clients to leave in socket.io?如何强制多个客户端离开 socket.io?
【发布时间】:2013-07-15 19:38:09
【问题描述】:

我正在编写一个脚本,其中的逻辑表明,如果通过 socket.io 'create room' 方法创建房间的人,则类似于:

client.on("createRoom", function (name) {
    client.room = name;
    client.join(client.room);
    client.emit("update", "Welcome to room:" + name + ".");
});

多人可以通过其他方式加入同一个房间。我的问题是,如何实现一个解决方案 - 如果房间的所有者(socket.io 生成的唯一 ID 存储在我的脚本中并标记为“所有者”)与服务器断开连接,则所有其他连接的客户端属于到同一个房间还要断开?我知道我必须使用 client.leave() 方法,但我不确定如何将其应用于多个客户端。

【问题讨论】:

    标签: javascript socket.io


    【解决方案1】:

    将客户端作为对象存储在数组中。存储房间号,如果他们拥有该房间的属性。在断开连接事件中,检查相关用户的ownsroom 属性,如果是,则循环遍历数组以搜索roomid 属性与断开连接所有者的属性匹配的其他客户端。当clients[i].roomid == disconnected.roomid的if语句为真时,调用leave函数断开连接。

    var i = 0;
    while(i < clients.length){
        if(clients[i].room == disconnected.room)
            clients[i].leave();
        ++i;
    }
    

    【讨论】:

    • 谢谢。 “房间号”是指房间的ID吗?另外,你是说做clients[i].leave()吗?我不确定我是否遵循您解释的最后一部分。
    • 是的,我正在尝试根据我的需要重新设计它。我有一个 people 对象,其中包含所有连接的客户,以及一个人是否拥有一个房间或在一个房间里,它的键控是 client.id: people[client.id] = {"name" : name, "owns" : ownerRoomID, "inroom" : inRoomID};
    • 还有一个问题。 var 客户 = [];并在套接字连接方法上 -> clients.push(client.id);似乎还不够。如何将客户端作为对象存储在数组中?
    • 你必须推送客户端,而不是client.id
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多