本文最后更新于:June 30, 2023 pm
本文作者:[wangwenhai] # 概要:本文主要讲一下物联网业务系统和中间件的使用以及技术选型
1.常见物联网技术简介
基于云的物联网平台和架构能将现实世界与虚拟世界连接起来。借助这些平台和架构,企业能够管理物联网设备的连接性和安全性,同时收集设备数据,将设备连接至后端系统,确保物联网的互操作性,并构建和运行物联网应用。
常见的物联网技术,其实还是基于物联网体系来做的,比如我们常见的共享产品,还有一些控制类的产品,其实本质还是互联网,还是基于TCP体系来实现的。
而现在提倡的物联网则是自成体系,一般为新的通信协议为主,自带组网和数据传输的功能,脱离开TCP/IP体系构建。
我们在本篇文章中主要介绍基于TCP/IP体系下的物联网系统构建。
2.开源物联网平台介绍
https://thingsboard.io/ :目前GitHub物联网后台系统排行第一 很多都是基于这个改的
https://www.kaaproject.org/ : KAA 适合做家庭设备 适合快速交付 做外包可以选
https://github.com/sitewhere/sitewhere :国外的一个适合做SAAS平台的 很庞大 玩起来费劲
3.开发技术选择
1.编程语言
一味的争论编程语言是没有任何意义的,恰当的编程语言用在恰当的场合才能发挥出巨大的优势。下面简单的分享下个人经验:
对于业务系统开发业,我一般比较关注这几个问题:
是否可快速开发?
是否技术体系成熟,便于快速迭代和二次开发?
文档和教程是否完善?
对于上面的原则,其实和大多数项目的开发原则都是一样的,不外乎就是用成熟稳定的技术,对于业务系统封的实现,我推荐用以下编程语言:
PHP:适合快速构建业务系统,对于中小型物联网平台还是很适合;
Java:适合构建体系庞大的业务系统,企业级应用可选择用Java开发;
Python:Python也适合快速开发业务系统,尤其是其优秀的WEB框架和众多的库,可以满足中小型团队的业务响应。
而对于设备协议交互和数据传输层,上面的体系就不合适了,因为物联网有几个很大的特征:高并发、大批量、高网络IO。因此我们需要一些具备这些特征的技术或者框架来实现。目前我建议用的技术体系和框架如下:
Java:Java有高并发框架,常见的就是Netty,Mina,tio等,个人推荐Netty,因为Netty是一个基于Actor模型的框架,采用事件响应机制,远远的比OIO技术实现的应用优秀,常见的用Netty实现的框架比如Vert.X,Springboot的响应式WEB等等 。
Golang:Go对并发的天然支持,很适合做物联网服务端,golang的轻量级协程可以快速响应请求,对于并发场景非常合适;
Erlang:Erlang本身就是做电信通信的,也适合做高并发的服务端
2.业务框架技术
对于Java体系而言,首推Spring全家桶,但是如果是小型项目可以试试国产的Jfinal。而Python则用Django框架,PHP的选择比较多,ThinkPHP、Zend、YII等等。
3.物联网(基于TCP栈的)常见协议
MQTT: 物联网 (IoT) 设备必须连接互联网。通过连接到互联网,设备就能相互协作,以及与后端服务协同工作。互联网的基础网络协议是 TCP/IP。MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。
AMQP: 高级消息队列协议(AMQP)是面向消息的中间件的平台中立的线级协议。
COAP: CoAP是受限制的应用协议(Constrained Application Protocol), 它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。
HTTP:超文本传输协议。
TCP:TCP初始协议。
UDP:UDP初始协议。
ModBus:Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。
4.物联网中间件选择
HiveMq:Java开发 适合Java技术栈
mosquito:C语言开发,性能极致 ,但是驾驭难度高 不适合非C技术栈玩
RabitMq:Erlang/OTP 开发驾驭难度大,几乎和C一样难以二次开发增加自有业务
RocketMq:Java开发 和Hivemq差不多 是Apache的产品
EMQ:国产软件 Erlang/OTP 开发驾驭难度大, 出自华为 纯粹的面向物联网的一个代理 因此脱离物联网场景的话 支持的就比较弱 但是是目前国内资料最多的
VenreMq:Erlang/OTP 开发驾驭难度大,国外软件 相当于是EMQ的增强版,支持各种客户端 插件等等 ,但是资料太少。
TCP:纯TCP协议一般用来设计自定义协议,对开发人员要求较高。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!