APP下载

一种基于物联网云平台的NB- IoT 单灯通信接口实现

2021-10-18孟凡辉

科学技术创新 2021年27期
关键词:线程服务器工厂

孟凡辉 肖 声

(国电南瑞科技股份有限公司,江苏 南京 210061)

NB-IoT 简介:随着互联网和移动互联网技术的发展,最几年物联网技术也有了飞速发展[1], 从最早期的短距离无线局域网(如Zigbee、Z-Wave、WiFi)和蜂窝网络(广域网,2G/3G/4G…),慢慢形成了LPWAN(低功耗广域网),典型的有NB-IoT、eMTC、LoRa、SigFox。

NB-IoT(Narrow Band Internet of Things,窄带物联网)技术是一种主要应用于低功耗广覆盖(LPWA)物联网(IoT)市场的新兴技术。NB-IoT 技术具有连接多、功耗少、覆盖广、成本低、速率低、架构优等特点。

NB-IoT 技术在国内的快速发展, 针对NB-IoT 技术的特点,越来越多的城市开始使用NB-IoT 单灯,以实现对单灯设备的精细化监控,为万物互联、有效节能提供有力基础。

一种典型的NB-IoT 实时监控系统如图1 所示:本文主要阐述的是图1 中接口服务器接收HTTP 推送和控制的方案(基于工厂模式的PocoC++ HTTP 服务、共享内存维护模块,其中应用服务器与接口服务器的通信通过消息中间件来进行通信),消息中间件和其他方面不在本文的讨论范围内。

图1

物联网云平台简介: 物联网云平台提供海量设备和数据连接的能力和维护,应用服务器只需处理数据的内容,而不需要维护海量设备的链接。物联网云平台具有免心跳、命令缓存、拥塞控制、远程升级、基站定位、无码开发、RA 功能、数据业务安全保证等特点,能够有效减少设备上报次数,保证数据和业务的可靠。

物联网云平台目前安装公司主要分为两类,一类是互联网企业物联网平台,另一类是运营商物联网云平台。

阿里、腾讯、Amazon、华为等互联网企业主要提供的是物联网通用云平台,将物联网能力、网络能力和云服务结合起来,按需向用户提供融合服务,能够强大的平台层服务,其收费模式主要以平台功能收费和按接口收费,且只提供平台层服务接口[2]。

随着物联网的发展,近几年各大运营商(中国电信、中国移动、中国联通)开始搭建物联网云平台,其与互联网物联网云平台相比具有以下特点:

(1)能够提供端到端服务(网络入口)。

(2)计费方式和传统的2G、3G、4G 卡类似,按照流量和连接数收费,用户较为清晰和理解。

(3)运营商物联网云平台的平台层能力虽然相对互联网企业相对较弱。

本文通过订阅物联网云平台变化数据推送的方式, 实现当NB-IoT 单灯有数据变化上送或者周期性上送时,通过物联网云平台http 推送单灯数据到接口服务器和调用物联网云平台http控制接口,实现对单灯数据的实时监测和控制。

基于工厂模式的Poco C++ HTTP 服务: 工厂模式是一种设计模式,当需要增加一个产品时,只需增加一个工厂类就可以,它通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的,具有很好的扩展性。

由于NB-IoT 单灯设备通过不同物联网云平台将数据推送到接口服务器,其通信协议和数据组织方式有相关差异。为了满足接口服务器的扩展性, 本接口服务器是基于工厂模式的Poco C++ HTTP Server 来实现。

Poco C++ 是一种开源跨平台、全面的、完整的C++框架,易学易用,性能优秀,能够低内存占用,具有很多特性[4]:

(1)HTTP 客户端和服务端(支持SSL),C++ 服务器页面编译器。

(2)多线程框架(线程池,活动对象,工作队列等)。

(3)支持SSL/TLS,基于OpenSSL。

(4)TCP 服务器框架(多线程)。

(5)网络数据流类库,支持Base64,HexBinary 编解码,压缩等等。

(6)共享内存管理等。

基于工厂模式的Poco C++ HTTP Server 主要包含两个产品类,一个是HTTP 请求处理产品类,一个是TCP 服务器连接产品类。其中TCP 服务器连接工厂类(TCP 服务器连接产品类子类),是根据HTTP 请求处理工厂类(HTTP 请求处理产品类子类)来进行创建。由于不同物联网平台数据格式有差异,不同的物联网云平台请求则对应不同的HTTP 请求处理工厂, 但是它们推送和调用都是基于HTTP 协议, 故TCP 服务器连接工厂类是相同的。所以当有新的物联网云平台NB-IoT 设备时,只需新增一个的HTTP 请求处理工厂类和处理句柄即可, 满足了不同物理网云平台的扩展性。

基于工厂模式的Poco C++ HTTP Server 中的HTTPServer类是TCPServer 子类,TCPServer 类实现了一个功能齐全的基于线程池的TCPServer。HTTPServer 初始化的时候需创建一个ServerSocket,并使其监听,同时设置HTTPServerParams 参数来满足不同服务器需求的配置, 并需提供HTTP 请求处理工厂类,该类用于创建对应物联网云平台HTTPRequestHandler 对应的工厂。

例如, 当有联通物联网云平台的HTTP 推送请求的时候,该HTTP 请求处理工厂类创建一个UnicomNBRequestHandle (是HTTPRequestHandler 的子类),通过handleRequest 函数实现对联通物联网云平台NB-IoT 设备请求数据的处理。

TCPServer 多线程的实现是基于线程池的, 其中HTTPServer初始化的时候,将父类TCPServer 也同时进行了初始化,并根据HTTP 请 求 处 理 工 厂 类 , 新 建 了 一 个HTTPServerConnectionFactory 的工厂类(与HTTP 请求处理工厂类对应),设置线程池大小,并创建一个TCPServerDispatcher 对象,其中TCPServerDispather 将链接加入队列,当有新HTTP 请求时,根据线程池情况,帮助TCPServer 分配不同服务链接线程,根据HTTPServerConnectionFactory 的 工 厂 类 创 建 一 个HTTPServerConnection,并调用HTTP 请求处理函数,即HTTP 请求处理工厂类的实现。HTTPServer 主要类之间的关联图,如图2所示。当需要增加其他物理网云平台的时候, 新增类似UnicomNBRequestHandle 和UnicomNBRequesetHandleFactory 类即可,程序架构不变,只需重载实现handleRequest 函数,易于扩展。

图2

对于实时控制信息, 本文是基于Poco C++ HTTP Client 来实现。HTTP Client 相对HTTPServer 来说结构简单,因为是一对一的,没有很大的并发量,对于控制,只需组织相关发送内容,通过HTTPClient 一个类即可发送。

综上,基于Poco C++网络库提供的HTTPServer 通过工厂模式和线程池技术,能够有效对数据进行并发处理和精确控制,并具有很好的扩展性。

一种基于物联网云平台的NB-IoT 单灯通信接口:本文在基于工厂模式的Poco C++ HTTP 服务的基础上,为了实现对云平台物联网单灯的实时控制和并发数据处理,达到精确管控,提出了一种基于物联网云平台的NB-IoT 单灯通信接口。

一种基于物联网云平台的NB-IoT 单灯通信接口主要包含共享内存模块、HTTP 服务模块、调用消息中间件模块。

(1)共享内存模块:共享内存模块是接口机中一个独立模块,主要负责定时循环读取数据库中关于NB-IoT 的设备关键信息,主要结构可以用下面结构体(以联通NB-IoT 单灯为例)表示,其中EXTEND_NB_DEV 主要是一类设备的一些关键信息,DEV_LAMP_SHM除了包含EXTEND_NB_DEV,包含了单灯的总数量和设备最新读取时间, 单灯数量的读取使得读写共享内存程序,只需写一定数量的单灯数据,无需将最大单灯数量都进行处理,提高处理速度。

共享内存使用Poco 中SharedMemory 模块将文件的全部内容映射到一个共享内存段中, 共享内存的大小即是DEV_LAMP_SHM的大小。根据读取数据库的联通单灯情况,即共享内存的起始地址,将结构体的信息写入该共享内存块。为了保证数据一致性,在循环读取数据库写入共享内存的时候,需加入信号量的P、V 操作,保证数据的唯一性和一致性。

共享内存模块同时也提供一个根据名称来访问的内存名称的独立接口,满足其他服务的读取访问。

(2) HTTP 服务模块: 针对基于工厂模式的Poco C++ HTTP服务的特性, 本文在其基础上, 重写了PocoC++ 网络库中TCPServer 类和HTTPServer 类, 增加循环读取共享内存NB-IoT单灯信息,接收物联网云平台的实时数据推送,并通过调用消息中间件的形式, 将NB-IoT 单灯数据解析后发送到应用服务器。对于控制NB-IoT 单灯的下行消息, 本文在TCPServer 中增加循环监测消息中间件是否发送控制消息,若收到,解析后,组成相对应的格式通过调用HTTP Client 的接口, 按照物联网云平台的API 格式,通过物联网云平台控制具体相关设备。

为了能够校验设备正确性、数据解析处理实时性、以及可靠性,本文增加读循环取设备共享内存模块,将单灯设备增加到一个实时内存map 中去。在循环的函数中,判断当前刷新时间和共享内存刷新时间,如果时间差(可自定义)较大,则重写map,保证设备数据正确有效。

对于应用服务器的控制命令,继续重写TCPServer,注册一个消息中间件,循环监测单灯控制命令,进行控制命令解析,调用运营商云平台对应的HTTP API 进行设备控制。

因为物理网云平台的HTTPAPI 有差异,本文依据工厂模式,按照类似HTTPServer 的方式重写HTTPClient 使其为一个接口类,具体实现由不同的子产品(子类)实现,如以下代码所示(华为OC 云平台的HTTP API 实现方式,截取片段):

其中UnicomNBHttpsClient 继承HTTPClient 类,nbinvoke 是其实现接口,当对不同物联网云平台进行控制时,选择对应的物联网云平台控制类进行实例化,进行控制内容处理。

处理上报数据时增加判断在共享内存中没有录入,如果没有则放弃处理。对于有效数据, 通过消息中间件写入到后台实时库,实现监控系统的实时监控,本文使用的消息中间件,通过注册消息来进行数据发送。

(3)消息中间件模块:本文中的消息中间件模块是用于与应用服务器进行收发消息的通道,一般都会提供消息注册接口,本文在处理物联网云平台的推送数据和接收应用服务器的控制消息时需要用到,在此不在进行详细描述。

本文提出的一种基于物联网云平台的NB-IoT 单灯接口实现,重写基于工厂模式和线程池的HTTPServer 和HTTPClient 服务,使用共享内存技术,并调用消息中间件接口来实现数据实时处理和控制。本接口有很好的扩展性,有效解决了NB-IoT 单灯数据的并发实时处理和实时控制。该方案已经在天津路灯指挥系统中稳定可靠运行,支持移动、联通、华为、电信物联网云平台的NB-IoT 单灯,目前已有接近3 万盏单灯的并发使用。

猜你喜欢

线程服务器工厂
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
PowerTCP Server Tool
BlackJumboDog
2018年全球服务器市场将保持温和增长
为什么工厂的烟囱都很高?
奶酪工厂
植物工厂
用独立服务器的站长注意了