node.js - 生产就绪的 WebSocket 物联网系统 - 软件设计建议
问题描述
我正在开发一个系统来控制一系列物联网设备。每组设备都被分组为一个“系统”,用于监视/控制现实世界的过程。例如,系统 A 可能正在管理进程 A 并具有:
- 3个摄像头
- 1个加速度计
- 1个磁力计
- 5个热电偶
网络服务器维护到每个设备的套接字连接。用户可以(通过 UI - 再次使用 WebSockets)连接到网络服务器并接收有关他们订阅的系统的更新。
当用户想要开始进程 A 时,他们应该按下界面上的“开始”按钮。这将启动相机、加速度计、磁力计和热电偶。这些将开始向服务器发送数据。它还触发服务器将每个设备的记录模式设置为 true,这意味着服务器会将输出写入数据库。我的问题:
我是否应该从我的 UI 中的 javascript 代码向服务器发送一个“启动”请求,并允许服务器单独启动每个设备(然后我如何处理错误,例如,如果单个传感器不工作 - 什么如果两个传感器不工作?)。或者我是否从 UI 向每个设备的服务器发送单独的请求,即启动摄像头 1、启动摄像头 2、启动加速度计、开始录制摄像头 1 等并单独处理每个成功/错误状态?
到目前为止,我在整个系统中的偏好是后一种方法——一个请求,一个响应;带有 HTTP 错误代码。但是,当需要控制许多设备时,编程会变得更加复杂,例如 - 系统 B 有 12 个热电偶。
系统的某些组件并不重要 - 例如,如果 1 个摄像头发生故障,我们可以继续,但是,如果加速度计发生故障,整个系统将无法运行,因此需要人工监控。如果服务器从单个“启动”消息单独启动设备,我应该返回一系列错误,还是服务器应该知道哪些组件是重要的并在重要组件发生故障时返回单个错误?在故障状态下,服务器是否应该处理停止每个传感器并返回到原始状态 - 如果然后失败怎么办?我预见到使用这种方法,这段代码会变得相当复杂。
几个月来,我一直在反复寻找解决这个问题的最佳方法,但我在网上找不到太多关于为现实世界构建复杂、生产就绪的物联网系统的建议。如果有人有任何建议或可以将我指向任何论文/书籍/等。我真的很感激。
提前致谢,
汤姆
解决方案
推荐阅读
- google-bigquery - Adwords 到 BigQuery Data Transfer Service 不会发送来自视频广告系列的转化数据
- wallpaper - 如何在 Scratch 中使用大舞台
- python - 在python中将字符串(2015-Q1)转换为日期(2015-03-31)
- azure - Azure 中的 Power BI 报告、共享容量和 Pro 许可证
- asp.net - ASP.NET - 上传文件时验证文件内容
- python - list.reverse() 没有给出正确的输出
- property-based-testing - 如何在 Python 假设中递归地生成布尔表达式?
- python - Python 2.7 在 python 中同时解码 UTF-8 和 unicode-escape 会导致 UnicodeEncodeError
- css - 无法仅对 IE 浏览器使用 css
- cocoa - 禁用包含具有动态行高的 NSOutlineView 的 NSScrollView 的初始调整大小动画