javascript - 在像 quizup 这样的多人游戏中,socket.io 房间在配对中是否有任何作用

标签 javascript node.js socket.io

socket.io rooms 在制作像 Quizup 这样的实时多人游戏中有何作用?我编写了这段代码,用于在连接到服务器时对两个玩家进行匹配:

var waitingPlayer = null;

io.on('connection',(socket)=>{
    console.log('new user connected');
    if(waitingPlayer == null)
    {
        waitingPlayer = socket;
        waitingPlayer.emit('waiting-message',{
            text:"waiting for an opponent"
        });
    }
    else{
        waitingPlayer.emit('matchFound',{
            text:"Match Found"
        });
        socket.emit('matchFound',{
            text:"Match Found"
        });
    }
}

最佳答案

Is there any role of socket.io rooms in making a real time multiplayer game like Quizup?

有点像,但不是真的。

Socket.io 房间如下:

  1. 一个集合(在编程意义上),可让您轻松跟踪一组套接字。
  2. 一种使用一个命令向一组套接字发送消息的简单方法。
  3. 一种通过一个命令向群组中的每个人(除了您自己)发送消息的简单方法。
  4. 房间也不是排他性的,因此给定的 socket 可以位于任意多个房间。
  5. 仅限服务器端功能。客户端无法访问房间,无法将自己置于房间中,但可以直接与房间通信。任何此类功能都必须通过要求服务器为您完成。

而且,这就是它们的本质。

房间没有内置匹配功能。您可以将房间用作等候室和个人比赛的集合管理工具,但您需要自己实现匹配逻辑,并且仅将房间用作集合(一种用于跟踪一个或多个套接字的便捷工具) .

例如,您可以在 socket.io 中创建一个“waitingRoom”房间,您可以在其中放置任何需要匹配但还没有匹配的套接字。而且,一旦您想开始另一个游戏,您就可以从 waitingRoom 集合中随机挑选两个套接字并开始它们之间的匹配。但是,在这种情况下,您实际上只是将房间用作收集工具,仅此而已。您也可以轻松拥有自己的套接字数组,并将其称为 waitingRoom。

在您显示的代码中,如果您从来没有超过一名等待玩家,那么您可以将其保留在一个变量中,就像您一样。您现有的方案似乎需要更多逻辑,以便当一个套接字与正在进行的游戏断开连接并且另一个套接字想要再次查找游戏时。并且,您需要处理 waitingPlayer 也断开连接的情况。

关于javascript - 在像 quizup 这样的多人游戏中,socket.io 房间在配对中是否有任何作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834915/

相关文章:

javascript - 使用来自 SSH2 的 SFTP 对象

node.js - electron-builder NSIS block map 是如何生成的?可以控制吗?

node.js - 无法通过 socket.io 发出?

node.js - 将散列密码保存到 Sequelize 违背了我保存散列密码的简单愿望

python - 引用错误: socket is not defined

node.js - Socket.IO - 如何在 socket.io 1.3.6 中使用 socketID 关闭套接字?

javascript - 替换意外删除的新行

javascript - 数据表中列的自定义(组)排序

php - 如何阻止 javascript ://as url parameter

javascript - 将焦点移至组合框字段而不是 VuetifyJS 中的芯片