【问题标题】:Which tools should I use for two way communication? [closed]我应该使用哪些工具进行双向通信? [关闭]
【发布时间】:2022-01-24 16:30:49
【问题描述】:

我目前正在使用 React Native 进行个人项目。我是网络/移动开发的初学者。我先描述一下我的情况。当前项目的要求是:

  1. 当用户(主持人)登录应用程序时,他将进入二维码屏幕并向他/她的朋友(客人)显示二维码。他们都在一家餐馆里。

  2. 他/她的每个朋友都将在同一个应用程序上登录自己的帐户,并从手机上扫描二维码。 然后客人将选择一些菜单项来订购。在此之前,主持人屏幕将显示有关每位客人的订单状态的屏幕。它会显示Not Ready,直到客人选择一些项目。一旦任何客人选择了他/她的物品,主机屏幕将显示该客人的更新状态,并显示“准备就绪”以及他们选择的物品和价格。我提供了一个线框图供您理解。

我的问题是,Host 和 Guest 之间如何实时通信?我最初的想法是,一旦客人选择了他/她的订单,它将调用 API 端点来更新数据库。另一方面,主机每隔几秒就会调用另一个端点,以查看数据库是否已更新。如果是,那么主机将相应地更新他的屏幕。这是正确的方法吗?在做一些研究时,我遇到了一个名为 socket.io 的双向通信。我的情况适合使用这项技术吗?我只是要求一些我可以用来实现这个想法的想法/技术/工具。提前致谢。

【问题讨论】:

    标签: reactjs react-native api socket.io network-programming


    【解决方案1】:

    每隔x 持续时间向服务器请求更新称为轮询。轮询效率较低,因为它会运行以检查更新,即使不一定有更新。

    更好的方法是使用 Websockets。 Socket.io 是一个很好的 JavaScript 库。

    Websockets 如何为您工作的要点

    您的所有客人,扫描二维码后,都可以根据二维码中的ID连接到同一个频道(也称为房间)。

    现在,无论何时有人选择他们的订单,您都可以使用该有效负载“发送”一个事件(比如我们将其命名为“订单”)到服务器,它可以将其广播给该频道中的每个人。

    // guest client
    socket.emit("order", payload)
    

    主机客户端可以监听此事件并根据需要更新 UI。

    // host client
    socket.on("order", payload => {
      console.log(payload);
    });
    

    这样,您可以完全避免轮询。您可以探索this guide,了解他们如何实现聊天应用程序以了解这种方法。

    您也可以使用 Firebase 实时数据库来代替 Socket.io。在这种方法中,您的来宾客户端将直接更新数据库,而您的主机客户端将观察或侦听这些更改并根据需要更新其 UI。这是guide to building a chat app using Firebase Realtime Database,您可以了解如何去做。

    希望这会有所帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2010-09-14
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多