硬件存储和服务器数据库之间的同步数据

物联网 联网 树莓派 无线上网
2021-06-19 05:02:04

我在中国的公交系统中看到,公交车内有可以处理电子支付的设备。这个过程是这样的:

  1. 乘客上车。
  2. 乘客使用智能手机应用程序中的二维码在设备屏幕上擦拭(二维码扫描仪)
  3. 如果乘客成功充电,他们将被允许在巴士上就座。如果没有,设备会发出一些警报。

我正在尝试在我的大学中为我的项目实施这个系统。起初,我使用树莓派和二维码扫描模块来识别二维码,并通过 Wi-Fi 将数据推送到远程服务器上的 API。我的做法是,每次设备收到二维码时,它都会立即将该数据发送到 API。然后 API 处理所有事情并将响应发送回设备。

一切正常。但是,出现了一个问题,每次发送之间似乎要花费很多时间,而且我并没有真正处理一些意外情况,例如将数据发送到 API 时连接丢失。

例如,当第一位乘客来了,把手机APP的二维码放到设备上,但整个过程大约需要4-6秒(包括将乘客的数据发送到服务器的API,API处理收费,余额处理) ,然后将响应发送回设备以检查是否允许该乘客进入)。有时,设备失去连接,因此乘客无法使用该设备。

于是,我萌生了这样的想法:

  1. 我会将数据库中乘客的关键数据(Id、姓名、余额)与设备的存储同步
  2. 现在,处理付款将直接在设备上实现例如,该设备将检查乘客的二维码,然后与其存储中的数据进行比较,以处理该乘客是否可以进入。
  3. 在所有乘客完成登记后(即公交车移动时),设备的存储将再次服务器的数据库同步

我认为如果系统以这种方式运行,它会很顺利,因为所有事情都会在本地完成直到它们同步。

以上就是我的系统和我的想法的简要总结。但是,我不在中国,我的国家到目前为止也没有实施类似的系统,所以我没有任何参考来源。

如果你们能给我一些关于这个新想法的方向或任何相关参考资料,我将不胜感激

  • 有可能吗?
  • 里面是否隐藏着一些危险的逻辑?
  • 如果是的话,你能帮我一些提示吗?例如,服务器数据库和设备数据库之间同步数据的最佳时间是什么时候?
  • 在服务器端,我使用 ASP.net 编写 API,通过使用实体框架处理乘客数据并不难(查找、编辑、更新)。但是我怎样才能在 Raspberry Pi 中做类似的事情来进行本地处理呢?
1个回答

我对你仍然有本地处理的类似想法。我不会处理这个想法的安全漏洞,因为它是一个学校项目。

让你的二维码也有用户的余额数据。您 RPi 读取代码,从它在 QR 代码上看到的余额中扣除费用。如果可以,完美,如果不能,您将被拒绝使用该巴士。如果你愿意,你可以用一些秘密来加密这个余额数据,这样人们就无法生成无限量余额的二维码。当公交车到站时,您只需将本地存储上传到服务器。

一些缺点:

  • 对于每次骑行,您的用户都必须打开他们的移动数据以更新他们的余额。您可以对 QR 设置时间限制,以确保它仅用于一次骑行。

  • 生成非法但有效的二维码。


对于独立于上述想法的技术部分:

您正在使用 .Net 作为后端。如果您想将相同的堆栈带入 RPi,您可以将Windows 10 IoT 版本安装到您的 RPi。它是免费的,只需要一台 Windows 10 计算机即可进行安装。不过我更喜欢在 RPi 上使用 python 和 Linux。

对于上面的支付想法,如果你只是忽略它是完全没问题的,它只是给你一个视角,对我来说是一个很好的头脑风暴。