如何使用 socket.io 将所有客户端重定向到另一个页面?

2024-03-20

我正在开发一款在线多人卡牌反人类游戏(React 在前面,React 路由器用于重定向,Node 在后面) 当大厅中的一个用户时,我试图重定向“大厅”或房间中的所有客户端单击“开始”,但现在只有单击开始的用户被重定向。

这个想法是有人会设置一个新游戏,它将有一个独特的 pin,在您创建游戏并选择您的头像后,其他人可以使用该 pin 加入大厅(这部分工作正常,大厅中的用户为所有用户实时更新),并且只有创建游戏的人才会在所有用户加入后获得“开始”按钮来单击以开始游戏,这应该重定向大厅中的所有用户。

在客户端,在大厅组件的构造函数中,我有

   socket.on("start game", () => {
      this.props.history.push(`/${this.props.match.params.pin}`);
    });

对于有权访问开始按钮的一位用户,单击该按钮时会触发以下操作

socket.emit("start");

然后进入后端

   socket.on('start', () => { 
        socket.emit('start game');
    })

但只有单击开始的用户才会被重定向,我似乎无法弄清楚这一点。

这是我第一次尝试实现套接字,我不太确定我在这里可能会错过什么


服务器需要向您想要重定向的每个用户发送一条 socket.io 消息,并提供他们应重定向到的 URL。每个客户端都应该有一个该 socket.io 消息的监听器,当他们收到它时,他们会设置window.location到新的 URL 以引起重定向。

因此,服务器会向每个应该重定向的客户端发送类似这样的内容:

socket.emit('redirectToNewGame', newGameURL);

其中套接字是应重定向的每个用户的套接字。

然后,每个客户端都会有这样的代码:

socket.on('redirectToNewGame', newGameURL => {
    // redirect to new URL
    window.location = newGameURL;
});

如果整个过程是由用户单击自己窗口中的按钮启动的,则该用户会向服务器发送一条消息以启动整个过程。当服务器收到该消息时,它会通过向每个客户端发送 socket.io 消息来通知应遵循该重定向的特定客户端集。

您的服务器如何准确跟踪哪些客户端应该重定向到该 URL 由您的设计决定。在 socket.io 的服务器端,通常使用 rooms 来实现这一点,但也可以用您自己的代码来完成。这只是应用程序设计的一部分,以及用户在整个过程之前会合的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 socket.io 将所有客户端重定向到另一个页面? 的相关文章

随机推荐

  • str_replace 多维数组 PHP 中的键

    我有一个多维数组 如下所示 Array results gt Array 0 gt Array object id gt 13 id gt 13 idno gt e00110 o00005 2010 PROG display label g
  • 为什么 Chrome 要求 robots.txt?

    我在日志中注意到 Chrome 请求了robots txt和我所期望的一切一样 2017 09 17 15 22 35 sanic INFO Goin Fast http 0 0 0 0 8080 2017 09 17 15 22 35 s
  • 将另一个转换附加到现有属性

    有没有办法将新的转换属性附加到现有属性 例如 我有一个div animation 其定义如下 animation transform translateX 50 translateY 50 现在我想追加transform scale 1 到
  • SlowCheetah 未在构建时转换文件

    我有一个项目正在尝试使用 SlowCheetah 我已经创建了我的配置文件 Test web config 和我想要使用的所有转换 调试 Mock config 调试 SQL config 发布 在我的构建配置中 我有一个构建后事件应该将转
  • Django 管理员:获取根据 GET 字符串过滤的 QuerySet,与更改列表中所见完全一样?

    在 Django 管理中 用户可以设置过滤器来限制更改列表中显示的行 如何获取具有由查询字符串定义的过滤器集的 QuerySet 实例 例如 如果我传递 start date gte 2009 11 06 Django 管理员将在某处应用
  • Ant 构建类路径 jar 生成“打开 zip 文件时出错”

    我有一个在 eclipse 中构建的项目 依赖于第 3 方 jar 我正在尝试为 ant 生成一个合适的构建文件 使用 Eclipses 内置的导出 gt ant 构建文件功能作为起始块 当我运行构建目标时 出现以下错误 javac err
  • Dotnet build 和 dotnet pack 生成不同的 nupkg

    这与这个问题 https stackoverflow com questions 76467763 cant use analyzer in nuget package an instance of analyzer cannot be c
  • Django 以 JSON 形式返回单个记录

    我创建了一个表单 用于在我们的网络管理中添加有关客户的注释 我正在使用 jQuery 和 Ajax 来提交 for 我希望 Django 视图返回新添加的注释 记录 以便我可以将其附加到客户注释表中 我的 Ajax 发送正在工作 并且正在保
  • 使用 php Imagemagick 调整图像大小

    我正在尝试使用 imagemagick 的函数 thumbnailImage 调整图像大小 现在 我之后没有对图像进行任何操作 只是回显新的尺寸以查看它是否有效 到目前为止 它还不起作用 这是我的代码 注意 它确实呼应了原始尺寸 但不是新尺
  • 如何让浏览器提示保存密码?

    嘿 我正在开发一个 Web 应用程序 它有一个登录对话框 其工作原理如下 用户点击 登录 登录表单 HTML 通过 AJAX 加载并显示在页面的 DIV 中 用户在字段中输入用户名 密码并单击提交 这不是一个
  • Django 过滤器测试

    class BusinessPartnerFilter SilBaseFilter active django filters BooleanFilter name date deactivated lookup expr isnull p
  • Drop 事件在 Chrome 中未触发

    似乎 drop 事件没有在我预期的时候触发 我假设当被拖动的元素释放到目标元素上方时 会触发 drop 事件 但情况似乎并非如此 我有什么误解吗 http jsfiddle net LntTL http jsfiddle net LntTL
  • 如果我在具有备用信任路径的链中的附加证书已过期,会发生什么情况?

    我有一个由 Sectigo 前 Comodo Positive SSL 产品 颁发的证书 状态良好 1年7个月后到期 该证书由 Sectigo RSA 域验证安全服务器 CA 颁发 CA 链中有两个中间证书 由供应商提供 最近的 Secti
  • Git 合并错误“无法提交,因为您有未合并的文件”

    我忘了git pull编辑之前我的代码 当我提交新代码并尝试推送时 出现错误 无法推送 那时我做了一个git pull这使得一些有冲突的文件突出显示 我删除了冲突 但我不知道从这里该做什么 我尝试过了git commit再次但它说 不可能提
  • ChartJS 如何设置X轴的最大标签?

    我从数组接收图表数据 其中存储了从 2016 年 1 月到 2018 年 12 月的日期 在图表中 它显示 3 年的所有月份 但我只需要展示1年 有任何想法吗 在这里 我传递一个数组并更改月份的单位 还有显示格式 chartHour con
  • JUnit 测试异常[重复]

    这个问题在这里已经有答案了 我对java真的很陌生 我正在构造函数上运行一些 JUnit 测试 构造函数是这样的 如果它的参数之一被赋予 null 或空字符串 它就会抛出异常 当我在 JUnit 中使用 null 或空字符串参数测试此构造函
  • 调用 save() 时 Django 模型不保存

    所以我试图保存 django 模型 由于某种原因我只收到 500 内部服务器错误 事情是 如果我评论 Social auth save 它可以工作并且我可以操纵 对象 但不保存它 为什么会发生这种情况 我正在使用 django tastyp
  • 是否有与 Add-MailboxPermission 等效的 REST(图形或其他)?

    现在我有一个 PS 脚本正在检查邮箱权限 如果缺少 则会添加权限 在 C 中 想调用以下等效项 获取邮箱权限 如果需要 添加权限 例如 添加MailboxPermission Identity email User AdminUserNam
  • 如何在 Bash 中重复一个字符?

    我怎样才能做到这一点echo perl E say x 100 您可以使用 printf 0s 1 100 这是如何运作的 Bash 扩展 1 100 所以命令变成 printf 0s 1 2 3 4 100 我已将 printf 的格式设
  • 如何使用 socket.io 将所有客户端重定向到另一个页面?

    我正在开发一款在线多人卡牌反人类游戏 React 在前面 React 路由器用于重定向 Node 在后面 当大厅中的一个用户时 我试图重定向 大厅 或房间中的所有客户端单击 开始 但现在只有单击开始的用户被重定向 这个想法是有人会设置一个新