物理设备的 Web 服务,technology/protocols 要使用哪个?

web service for a physical device, which technology/protocols to use?

(请注意本人是自学初学者)

我正在为要连接到网络的设备开发 Web 服务器。它的服务将主要用于本地大型网络,而不是互联网。

具体来说,该设备是一个车底检测系统(UVIS),当车辆通过时会记录视频并对其进行一些处理,然后将其发送给连接的授权本地客户端查看并发送给数据库(即基于事件的系统)。

首先,我搜索了technology/protocols used by printer web services(网络打印机),发现有针对打印机的特定协议,有些甚至是特定于某些制造商的。

我遇到了 WS-* 堆栈,(实际上我已经使用 WS-Discovery 实现了一个简单的发现 IP 摄像机的实现,并将 SOAP 与 Onvif 规范定义的一些功能一起使用),但我发现这很复杂而不是确定是否值得冒险探索这个世界。稍微搜索一下就会发现,这主要由 windows 系统使用(实际上 Microsoft 是这些标准的主要开发者)。

我正在寻找其他现成的 technology/protocols,它们具有发现功能、易于实施、可与其他设备集成、广泛应用和面向未来。

谁能给我讲讲这个?

到目前为止,我的计划是使用 WS-Discovery(因为它具有 IANA 保留的多播地址)来获取 Websocket uri,并在其上实现我自己的简单协议。我选择 websocket 而不是普通套接字,因为它有机会与浏览器应用程序一起使用。

如果您正在录制视频,您要么想要实时流式传输(查看高端 IP 摄像机使用的 RTSP 协议,可以在 gstreamer 或 vlc 中找到实现),要么将视频记录为文件后拉取视频,然后使用普通的网络上传系统即可。

您录制视频的摄像头可能会以 RTSP 格式发送数据馈送,因此您可能只需要连接到该馈送即可。

反正我这几天会用web协议,不需要重新造轮子。有许多用于嵌入式系统的网络服务器(开源的 civetweb 在我看来是非常简单有效的东西)。然后,您将使用已建立的通用 Web 服务创建您的程序。易于构建,几乎每个人都能很好地理解。

WS-* 协议很复杂,如果你不能让一个库工作,那么在网络的 DNS 中注册一个服务器服务并让每个客户端告诉它(通过 REST API call)) 它当前的IP地址是什么。不过,让每台设备从一开始就在网络的 DNS 服务器上注册会更容易,要发现哪些设备可用,您只需要 ping 每个设备即可。