首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用socket.io将所有客户端重定向到另一个页面?

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

Stack Overflow用户
提问于 2019-06-20 00:17:07
回答 2查看 1.7K关注 0票数 5

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

这个想法是有人将设置一个新的游戏,这将有一个独特的引脚,在你创建游戏并选择您的头像后,其他人可以使用该引脚加入大堂(这部分工作良好,在大堂的用户被实时更新为所有用户),只有创建游戏的人将得到一个“开始”按钮,点击开始游戏,一旦所有用户都已加入,这应该重定向所有用户在大堂。

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

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

对于有权访问start按钮的用户,单击该按钮时将触发以下操作

socket.emit("start");

然后转到后端

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

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

这是我第一次尝试实现套接字,我不太确定这里会遗漏什么

EN

回答 2

Stack Overflow用户

发布于 2019-06-20 00:49:02

服务器需要向您想要重定向的每个用户发送一条socket.io消息,其中包含他们应该重定向到的URL。每个客户端都应该有一个该socket.io消息的侦听器,当它们获得该消息时,它们将window.location设置为该新的URL以引起重定向。

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

socket.emit('redirectToNewGame', newGameURL);

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

然后,每个客户端都会有如下代码:

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-06-20 08:31:32

一些回复的人建议我使用名称空间,这是非常有意义的,也是有效的。

io.in(pin).emit("start game");

而不是简单地

       socket.emit('start game');

让它工作了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56672050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档