【问题标题】:Generating rooms with Node.js / Socket.io使用 Node.js / Socket.io 生成房间
【发布时间】:2017-10-20 19:09:04
【问题描述】:

agar.iogenerals.io 这样的一些网页游戏有一个功能,玩家可以创建一个与链接关联的私人游戏室。其他玩家可以通过浏览器中的相同链接加入房间。这个功能是如何工作的,我可以使用 Socket.io 和 Node.js 复制它吗?

【问题讨论】:

  • 是的,你可以,socket.io 网站上有它的例子。很简单,为什么要在这里问?

标签: javascript html node.js socket.io


【解决方案1】:

"chat" example on the socket.io site 中涵盖了其中一些内容。有多个部分可以完成这项工作。

  1. 将用户放入给定名称的聊天室。
  2. 为您的用户创建某种用户界面,以供其他用户查看现有聊天室,然后单击告诉您的服务器他们想要加入该聊天室的内容。
  3. 创建服务器请求处理程序来处理用户加入特定聊天室的愿望。
  4. 创建一个用户界面,以便在您加入的房间中聊天。
  5. 在您的服务器上接收聊天文本时,将其发送给该聊天室中的所有其他用户。

在 socket.io 中,您的服务器就是将 socket.io 连接放入房间的东西。它通过调用socket.join(roomName) 来实现,其中socket 是您想要放入房间的用户的socket.io 连接。如果您想允许用户创建自己的房间,那么您必须让他们指定房间名称,然后向服务器发送请求以启动该聊天室。然后服务器会调用socket.join(roomName),聊天室会自动创建。如果您希望其他用户知道该房间现在存在,您必须向所有人广播您创建的一些消息,告诉所有连接的用户刚刚创建了一个新房间。这通常会使用以下内容:

io.emit('newRoom', roomName);

而且,所有用户都必须收听newRoom 消息。

然后,假设您有某种用于显示所有现有房间的用户界面,您可能会创建另一条消息,客户端连接可以发送到服务器以表达对加入特定房间名称的兴趣,例如:

 io.emit('joinMeTo', roomName);

然后,服务器将在每个客户端套接字上侦听 joinMeTo 消息并对其进行处理:

 socket.on('joinMeTo', function(roomName) {
     socket.join(roomName);
 });

更多细节在上面引用的聊天演示中。如果您在某个特定步骤上遇到困难,那么您可以提出更具体的问题。

【讨论】:

  • 谢谢!我一直在尝试使用命名空间,但似乎房间会更好。
  • @SimonHuang - 是的,命名空间并不是真正用于聊天类型的功能。我认为命名空间更像是预定义的信息频道,然后你连接到所需的频道(把它想象成有线电视频道——你调到包含你想要的信息的频道)。您通常不会像使用房间那样动态创建命名空间。
猜你喜欢
  • 2014-07-29
  • 2012-12-08
  • 2013-10-10
  • 1970-01-01
  • 2014-02-23
  • 2023-03-27
  • 2021-12-21
  • 2015-05-29
  • 2020-01-10
相关资源
最近更新 更多