我应该使用哪些工具进行双向通信?

Which tools should I use for two way communication?

我目前正在使用 React Native 开发个人项目。我是 web/mobile 开发的初学者。先说说我的情况吧。当前项目需求为:

  1. 当用户(主播)登录应用程序时,他将转到二维码屏幕并向his/her位朋友(访客)展示二维码。他们都在一家餐厅。

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

我的问题是,Host 和 Guest 之间如何实时通信?我最初的想法是,一旦客人将 select his/her 订单,它将调用 API 端点来更新数据库。另一方面,主机将每隔几秒调用另一个端点以查看数据库是否已更新。如果是,则主持人将相应地更新他的屏幕。这是正确的方法吗?在做一些研究时,我遇到了一种叫做 socket.io 的东西,用于双向通信。我的案例适合使用这项技术吗?我只是要求一些 ideas/technologies/tools 可以用来实现这个想法。提前致谢。

每隔 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 以了解他们如何实现聊天应用程序以体验该方法。

You can also use Firebase Realtime Database instead of Socket.io. In this approach, your guest clients will be directly updating the database and your host client will be observing or listening to those changes and updating its UI as necessary. Here's a guide to building a chat app using Firebase Realtime Database, so you can get an idea of how to go about it.

希望这对您有所帮助。 :)