使用gRPC作为IoT协议而不是LWM2M / CoAP

时间:2017-01-30 12:13:20

标签: protocol-buffers grpc coap

我一直在想着将gRPC用于'IoT'型设备;没有像传感器那样受限制的东西;更像是单板计算机内置设备,如机器人,无人机等。设备和集中控制器之间的接口需要什么,因为这些设备是由其他公司单独开发的。所以版本化的界面语言是必须的;它不应该只是在word文档中;可编程的东西,如头文件或WSDL或IDL或ProtocolBuffer。在设备和控制器之间,应该为注册,重新注册等常见用例指定行为。这可以在word文件或某些非技术文档中。

协议缓冲区(第3版)中的(rpc)接口规范以及通过gRPC的高效实现使我能够通过CoAP / LWM2M(乐山Java和C ++实现)进行选择。

使用过LWM2M和grPC后,我会说gRPC对开发人员更友好;与OMA LWM2M进程相比,接口定义和实现速度很快。当然,gRPC中没有Observer-Notify,但对于MQTT应该足够了。

严格来说,无法将LWM2M与gRPC进行比较。 LWM2M不仅仅是接口,而且还定义了许多物联网案例中的行为,如BootStrap,Registration,KeepAlive,SW Upgrade等,其通用HTTP如GET,PUT在URL类型可寻址资源上使其非常完整。但是,大多数这些行为都可以通过一些努力自定义。

我们计划编排的一些物联网事物远不是像灯泡这样的小脑器,更像是机器人。有没有人使用gRPC用于类似目的。任何失败故事的成功分享

4 个答案:

答案 0 :(得分:2)

我已经采取了一切措施并将其用于连接“设备”的项目中;这些是像Raspberry-pi这样的小型计算机。总的来说,这是一次很好的经历使用的语言主要是C ++和Java,也是Node.js中的JavaScript。我们使用它作为Dockerized微服务;负载平衡是我们没有做过的事情;我读到基于HTTP / 2的负载平衡很棘手;将更新该部分;计划使用Kubernetes。具有版本化接口的整体容器技术 - GRPC似乎非常适合(微)服务

答案 1 :(得分:2)

在物联网的gRPC中我会想到的是MQTT MQ功能,如消息排队,代理桥接QoS参数。或者通过SMS传输CoAP带外消息。在这种情况下,gRPC“只是”一个RPC框架,它假设始终通过TCP连接。

答案 2 :(得分:1)

我们在考虑与Joe's相同的解决方案,其中包括CoAP + Protobuf:

  • Protobuf及其IDL是一种非常有用的方法,用于以集中方式定义和管理我们的API。 Google的api-linterAIPs是使一切保持理智的高质量资源。
  • 用于运输的CoAP:物联网设备的轻量协议。它几乎可以在每个RTOS /嵌入式/平台中使用,并且适应了我们在这个世界上通常面临的低带宽需求。作为Thread选择的协议和支持Project Connected Home Over IP给予的帮助也确实有帮助。
  • 将Protobuf用于消息,无论它们是请求/响应还是IoT设备推送的事件消息。 nanopb已经解决的问题,它是适用于嵌入式系统的protobuf线兼容C代码生成器。
  • 基于IDL生成我们自己的存根,以基于CoAP和nanopb代码创建我们自己的包装器。通过将其用于CoAP可观察机制,支持一元调用以及服务器流传输。

答案 3 :(得分:0)

我将esp32和R_Pi与CoAP和protobufs一起使用。据我所知,esp32 / 8266不支持gRPC。我对此非常满意,但是没有针对lwm2m进行任何具体测试。实现是here