【问题标题】:How do I use a single connection with socket.io如何使用与 socket.io 的单个连接
【发布时间】:2022-01-17 01:05:52
【问题描述】:

我正在使用 socket.io 和 node.js 制作一个实时多人游戏,我有一个 html 文件,它运行一个公共脚本以连接到服务器并运行命令,以及定义我需要的库

<script src="https://code.jquery.com/jquery-2.2.2.min.js"></script>

我在具有以下功能的公共 js 文件中有一个连接和断开功能:

// send join request
function joinlobby(room) {
  socket.emit("userJoined", room);
}

// emit when a player leaves
function leavelobby(room) {
  socket.emit("userLeft", room);
}

每当我在函数中创建一个新的套接字时,像

// emit when a player leaves
function leavelobby(room) {
  let socket = io();
  socket.emit("userLeft", room);
}

它会正常运行,但是如果两者都有单独的连接,则会导致问题。我试图通过将let socket = io(); 放在函数上方以使用相同的套接字来让它们使用相同的连接,但是当程序到达该行时,它会停止运行文件而不会引发错误

我如何使用单个连接到服务器,和/或为什么当我在函数外部定义套接字时程序会断开连接?

为清楚起见进行编辑: 问题不在于每个客户端都需要一个连接,而是每当我在每个相应的函数中定义套接字时,每个客户端都有多个连接。我的目标是每个客户端只有 1 个连接,但该行会引发错误

我很抱歉模棱两可,我是新来这里提问的人

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    当您创建到套接字服务器的连接时,每个客户端都会有自己的连接,如果您想向多个客户端发送一条消息,您应该使用房间。它非常易于使用:

    io.on("connection", socket => {
      socket.join("room1");
    });
    

    如果引导客户端连接到同一个房间,您将能够向该房间发送消息。

    io.to("room1").emit("Hello every body");
    

    更多信息在这里:https://socket.io/docs/v3/rooms/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多