CN110572474B - 用于嵌入式终端长连接通讯的方法 - Google Patents
用于嵌入式终端长连接通讯的方法 Download PDFInfo
- Publication number
- CN110572474B CN110572474B CN201910916245.1A CN201910916245A CN110572474B CN 110572474 B CN110572474 B CN 110572474B CN 201910916245 A CN201910916245 A CN 201910916245A CN 110572474 B CN110572474 B CN 110572474B
- Authority
- CN
- China
- Prior art keywords
- message
- embedded terminal
- communication
- communication thread
- embedded
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Abstract
本发明涉及嵌入式技术领域,公开了一种用于嵌入式终端长连接通讯的方法,用以解决建立多线程开销大,数据同步复杂的问题。本发明只创建一个单独的通讯线程;当嵌入式终端与服务器之间的长连接异常断开时,通讯线程调用嵌入式终端的初始化接口,实现自动重新连接;当嵌入式终端需要发送消息时,通讯线程调用嵌入式终端的消息发送接口进行消息发送;当嵌入式终端需要接收消息时,通讯线程调用嵌入式终端的消息接收接口进行消息接收;通讯线程在消息处理时,将需要处理的消息放入消息队列逐条处理;逐条处理过程中,如果当前消息处理失败,则缓存该消息,等待循环下次发送。本发明适用于嵌入式终端长连接通讯。
Description
技术领域
本发明涉及嵌入式技术领域,特别涉及用于嵌入式终端长连接通讯的方法。
背景技术
传统的多线程实现长连接数据传输方案一般是:接收数据开辟一个线程,发送消息再开辟一个线程。虽然在一定程度上提高了响应速度,但是线程也是程序,所以线程需要占用内存,而对于资源紧张的嵌入式终端,内存开销是必不可少需要考虑的一点;多线程需要协调和管理,对共享资源的访问会相互影响,必须解决竞用共享资源的问题;而复杂的控制,开发难度相对单线程较高,可能会引入一些Bug。本方法设计相对于传统的多线程实现长连接数据传输的优势有如下两点:1)轻量性:本方法实现长连接建立只需要建立单个线程即可,所占用的内存资源将会大大减少,节省的堆栈空间可以根据具体的业务需求,适宜地进行弹性增大消息队列,从而保证在网络拥塞的情况下,消息传输的完整性和准确性;
2)易用性:因为采用单线程的架构设计,对于消息发送和接收处理都处于一个线程,整个流程相对简单紧凑,裁剪了多个线程间的通信,删减了多线程之间非必须的繁琐交互,从而提供给开发者的使用接口也相对精简。
目前,由于嵌入式设备资源有限,并且要保证数据传输的安全性和完整性。必不可少的需要增加安全模块,消息缓存等机制,这又将消耗很大比例的内存空间。而由于硬件成本的限制以及实际的业务应用场景相对简单,嵌入式芯片的RAM一般都相对较小。因此在保证功能完整运作的情况下,内存开销需要尽可能压榨到极致。传统方法中实现嵌入式设备的远程控制则需要通过与云端的长连接来建立通信,而一般收发消息的处理会采用多线程机制来实现。因为多个线程间独立运行,在多核的情况下更能充分利用CPU资源的,能一定程度上提高响应速度。但是在嵌入式终端采用多线程可能相对不是那么合适。
发明内容
本发明要解决的技术问题是:提供一种用于嵌入式终端长连接通讯的方法,用以解决建立多线程开销大,数据同步复杂的问题。
为解决上述问题,本发明采用的技术方案是:只创建一个单独的通讯线程,并通过所述通讯线程建立嵌入式终端与服务器之间的长连接;
当嵌入式终端与服务器之间的长连接异常断开时,所述通讯线程调用嵌入式终端的初始化接口,实现自动重新连接;当嵌入式终端需要发送消息时,所述通讯线程调用嵌入式终端的消息发送接口进行消息发送;当嵌入式终端需要接收消息时,所述通讯线程调用嵌入式终端的消息接收接口进行消息接收;
所述通讯线程在消息处理时,将需要处理的消息放入消息队列逐条处理,其中,所述消息处理包括消息发送和消息接收;逐条处理过程中,如果当前消息处理失败,则缓存该消息,等待循环下次发送。
进一步的,所述通讯线程在消息发送和接收时,可采用二进制流来替代传统的json格式数据,减小网络负荷。
进一步的,所述通讯线程逐条处理各条消息时,均可设定超时时间。
进一步的,嵌入式终端与服务器会可通过所述通讯线程定期发送一个心跳消息给对方,如果一方在约定的时间内没有收到对方发送的心跳消息,则表明对方已经异常断开。
进一步的,为了最大程度保证重要消息的可达性,在网络拥塞的情况,所述通讯线程可将优先级低的消息出队,让优先级高的消息入队。
进一步的,所述嵌入式终端可为智能网关。
本发明的有益效果:本发明采用单线程实现长连接通讯,减少了内存资源的占用,避免了多线程之间繁琐交互造成死锁的情况,顺序执行的流程简洁明了,逻辑清晰利于开发维护。
附图说明
图1为本发明的系统架构图。
具体实施方式
为了解决建立多线程开销大,数据同步复杂的问题,本发明采用单线程实现嵌入式终端长连接通讯。本发明由于采取单线程处理,因此重难点是保证消息接收和状态上报这两条路径的实时性。在整个消息传输路径上,对于上行消息进行入队操作,进入队列的消息逐条发送。队列中第一条消息发送时,不管成功与否,都需要进入消息接收处理流程。发送成功则处理第二条队列消息,失败则缓存该消息,等待循环下次发送。消息接收处理也是如此,在设置的超时时间内若没有收到数据,则进入到发送处理模块,检测发送消息队列是否有数据,然后再重复以上循环处理。消息的接收和发送都必须要设定超时时间,并且超时时间应尽量短暂,建议不超过500ms。因为设置的超时时间比较短,要保证消息的可达性,所以链路传输的数据长度应尽量简短。这样处理不仅减少了整个消息缓存所占用的内存空间,也减小了网络的传输流量。针对数据长度的更改,本发明可以采用二进制流来替代传统的字符串格式传输。例如采用json格式的数据可以映射为二进制流,从而保证整个长连接通讯流程的完整,而不会消息堵塞导致收发数据异常。
本发明的具体方案如下:
S01.创建单独的一个通讯线程,堆栈大小可以根据嵌入式芯片进行适当的裁剪。
S02.初始化流程:通过所述通讯线程完成嵌入式终端与服务器之间连接的过程,实现长连接链路的搭建。对于长连接成功状态设置一个标志位,在检测该标志位为连接成功的情况,才进入正常的消息接收处理,若长连接已经断开,则进行重连操作,对于发送的消息则进入缓存队列。提供连接状态的回调函数给开发人员,针对连接建立成功和断开连接,可以根据业务需求做相应的处理;
S03.在连接完成后,可以通过此链路连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。整个流程只需要放在一个单独的线程中,如图1所示,该方案嵌入式终端提供了三个接口给线程:1)初始化接口、2)消息发送接口、3)消息接收接口。若长连接异常断开,实现自动重新连接,即进行步骤[S02]中的连接过程。该流程极大地简化了API,包含了所有用户要求的操作,对于用户的开发难度也是尽可能减小。整个线程主要完成两个动作:一个是消息发送处理,另一个是消息接收处理。在此长连接通讯过程的消息类型可以分为4类:请求消息,心跳消息,推送通知,消息回复。本发明相对于多线程的机制,1)减少了调度和管理的开销;2)不需要多线程之间复杂的同步机制,避免了死锁的情况;3)提供的API和整个流程顺序处理更加清晰明了。
S04.消息发送:在长连接这条链路上,数据上行又可以划为两类:a)请求消息:此消息表示发送方请求接收方返回某一个资源,如果在指定的时间内未收到接收方的回复。则放弃等待,并返回一个请求超时;b)心跳消息:在客户端和服务器执剑定时通知对方自己状态的数据包,按照一定的时间间隔发送。双端为了保证对方连接有效性,必需定期发送一个心跳消息给对方,如果一方在约定的时间内没有收到对方发送的心跳消息,则表明对方已经断开连接或者出现异常,则立即断开链接。物联网大部分应用场景需要保证通讯的即时性和准确性。例如安防设备的报警消息,则应保证不能丢失。因此本发明对于发送模块采用了消息队列机制。发送的消息会存入一个缓存队列,队列大小可以动态配置,根据可用内存弹性更改。
S05.消息接收:在步骤S03消息发送流程处理完成过后,进入消息接收流程。若在步骤S03中消息队列为空及没有消息需要发送,则直接进入消息接收处理中。在长连接通讯链路上,数据下行也可以划为两类:1)通知消息此消息表示发送方向接收方发送一个通知,就是通过建立一条嵌入式终端与服务器的连接链路,当有消息需要发送到嵌入式终端时,通过此链路发送即可;2)回复消息此消息表示发送方向接收方发送一个回复消息以回复对方曾经发送的某一条请求消息,此消息的ID为接收方发送的此条请求消息的ID.如果上层应用在指定的时间内未返回消息,则向发送方发送一个处理超时。
本发明不仅仅局限于处于广域网中的客户端和服务端两者之间建立长连接通讯,针对本地局域网也可以采取该设计方案实现。本地服务端和客户端采用tcp建立连接,并且通过定时发送心跳数据来检测该长连接链路是否异常。本发明也不局限于终端设备,是一个通用的长连接通讯模块。可以作为一个IM即时聊天软件,也可以是一个物联网消息透传的中转站。
实施例
为使本发明的目的、技术方案和优点更加清楚,下面结合实施例对本发明做进一步地详细描述:
实施例提供了一种单线程实现嵌入式终端长连接通讯的方法,其具体应用实例可应用在智慧家庭场景中的智能网关中。智能网关与云端服务器建立长连接;通过长连接向智能网关下发任务指令,以便智能网关根据任务指令执行对应的任务;在智能网关执行完任务后,上报对应的状态数据和控制回复。可以整合为SDK提供开发使用。
在步骤S01中,对于不同操作系统的终端,例如家庭智能网关一般采用FreeRTOS或者Linux,根据具体的操作系统,采用对应的线程库函数。线程栈大小根据采用的具体芯片的RAM进行分配。由于物联网终端传输的数据消息较为短小,每个消息Buffer建议设置不超过1KB,消息队列长度再根据业务需求适当设置。
在步骤S02中,初始化接口首先对于远程建立连接的服务器进行域名解析,然后通过socket建立tcp链接。此步骤也可以根据系统安全级别需求,额外增加证书认证等流程。若连接失败则一直重复建链,针对动态ip的情况,每次重新建立连接时都需要再次进行域名解析,重连的延时时间可以进行动态配置,从而减小服务器并发。
在步骤S03中,实施例因采用单线程机制,对于消息接收和发送需要设定超时时间,即终端芯片需要支持基本的LWIP协议栈,包含有定时器函数。从而保证整个流程完整而不会消息堵塞导致收发消息异常。
在步骤S04中,消息发送接口进行消息、数据的上报。针对长连接特性,对于请求消息可以复用为心跳消息,即终端所有的上行消息都可作为心跳处理。若消息成功发送后,收到服务端的ack报文,则重新进行心跳间隔计时。而对于心跳回复消息,也不拘泥于固定格式,终端收到的通知消息也可以复用。因此尽可能减少不必要的内存开销和资源占用。当长链接异常断开时,消息依然可以入队,对于缓存的消息在重新建立连接之后发送。在完成了步骤S01初始化,并且建立了socket连接后。进入一个循环检测处理流程。在队列没有塞满的情况,将消息按照紧急程度进行分类和入队处理。对于报警之类的信息应该比普通的设备状态上报紧急,在网络拥塞的情况。会将普通级消息出队,让紧急级的消息入队,从而最大程度保证重要消息的可达性。对于消息发送的情况,在缓冲区没有被塞满的情况下,即send函数也需要设置超时时间,防止长时间延时接收消息。
在步骤S05中,消息接收服务端发送的数据请求,根据请求信息完成基本的设备控制等功能。对于嵌入式终端,比如智能家庭网关一般作为客户端角色。由于本方案采用单线程设计,对于消息接收需要设置超时时间,可以根据业务需求,设定为与心跳检测周期相关的时间参数。对于接收超时后,则进行断链,重新建立连接的操作。例如超时断链可以设置为2个心跳周期,防止由于网络抖动导致长连接频繁重新建立。若需要提高网络灵敏感知度,则相应缩短超时判断时间即可。
实施例在整个设备控制流程中,传输的数据格式可以进行精简缩短。例如在表示灯的开关状态时,传统的方式是采用json的格式。其中一个键值表示具体的设备类型,一个键值来表示设备的状态信息。针对这种采用字符串而导致数据内容冗余的问题,可以采用1个字节来枚举设备类型,最多可以有256种类型。而对于设备状态也可以用4个位来表示,最多可以列举16种状态。最后还可以增加一个保留字段来扩充,从而保证数据的完整性和可扩充性。字段的具体长度也可以根据业务需求进行更改。实施例采用二进制流传输的方式可以将两个字段的数据从原来十多个字节的消息数据缩减至不到2个字节。字段越多,优化节省的空间越大,极大地减少了网络负荷。
Claims (5)
1.用于嵌入式终端长连接通讯的方法,其特征在于,只创建一个单独的通讯线程,并通过所述通讯线程建立嵌入式终端与服务器之间的长连接;
当嵌入式终端与服务器之间的长连接异常断开时,所述通讯线程调用嵌入式终端的初始化接口,实现自动重新连接;当嵌入式终端需要发送消息时,所述通讯线程调用嵌入式终端的消息发送接口进行消息发送;当嵌入式终端需要接收消息时,所述通讯线程调用嵌入式终端的消息接收接口进行消息接收;
所述通讯线程在消息处理时,将需要处理的消息放入消息队列逐条处理,其中,所述消息处理包括消息发送和消息接收,消息发送和消息接收均设定了超时时间;逐条处理过程中,如果当前消息处理失败,则缓存该消息,等待循环下次发送。
2.如权利要求1所述的用于嵌入式终端长连接通讯的方法,其特征在于,所述通讯线程在消息发送和接收时,采用二进制流的传输格式。
3.如权利要求1所述的用于嵌入式终端长连接通讯的方法,其特征在于,嵌入式终端与服务器会通过所述通讯线程定期发送一个心跳消息给对方,如果一方在约定的时间内没有收到对方发送的心跳消息,则表明对方已经异常断开。
4.如权利要求1所述的用于嵌入式终端长连接通讯的方法,其特征在于,在网络拥塞的情况,所述通讯线程将优先级低的消息出队,让优先级高的消息入队。
5.如权利要求1所述的用于嵌入式终端长连接通讯的方法,其特征在于,所述嵌入式终端为智能网关。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910916245.1A CN110572474B (zh) | 2019-09-26 | 2019-09-26 | 用于嵌入式终端长连接通讯的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910916245.1A CN110572474B (zh) | 2019-09-26 | 2019-09-26 | 用于嵌入式终端长连接通讯的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110572474A CN110572474A (zh) | 2019-12-13 |
CN110572474B true CN110572474B (zh) | 2021-09-21 |
Family
ID=68782563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910916245.1A Active CN110572474B (zh) | 2019-09-26 | 2019-09-26 | 用于嵌入式终端长连接通讯的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110572474B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897496B (zh) * | 2020-07-28 | 2023-12-19 | 上海德拓信息技术股份有限公司 | 分布式系统中提升网络io读写性能的方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101051280A (zh) * | 2006-04-03 | 2007-10-10 | 北京握奇数据系统有限公司 | 智能卡嵌入式操作系统及其控制方法 |
CN101217554A (zh) * | 2008-01-14 | 2008-07-09 | 张尧森 | 网页上实现的即时通讯的方法 |
CN102957627A (zh) * | 2012-11-19 | 2013-03-06 | 浪潮电子信息产业股份有限公司 | 一种基于tcp长连接的提高数据传输效率的方法 |
CN103618741A (zh) * | 2013-12-09 | 2014-03-05 | 惠州华阳通用电子有限公司 | 一种tcp长连接通信系统及方法 |
CN106850784A (zh) * | 2017-01-17 | 2017-06-13 | 华东交通大学 | 智能主机与云服务之间的通信方法 |
CN108073414A (zh) * | 2016-11-15 | 2018-05-25 | 北京亿阳信通科技有限公司 | 一种基于Jedis的将多线程并发请求合并批量提交并分发结果的实现方法 |
CN109831474A (zh) * | 2018-11-26 | 2019-05-31 | 阿里巴巴集团控股有限公司 | http长连接的保活系统、方法、服务器及可读存储介质 |
CN109947636A (zh) * | 2017-12-20 | 2019-06-28 | 浙江宇视科技有限公司 | 异常线程定位方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6886169B2 (en) * | 2002-11-19 | 2005-04-26 | Nexaweb Technologies, Inc. | System and method for stateful web-based computing |
-
2019
- 2019-09-26 CN CN201910916245.1A patent/CN110572474B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101051280A (zh) * | 2006-04-03 | 2007-10-10 | 北京握奇数据系统有限公司 | 智能卡嵌入式操作系统及其控制方法 |
CN101217554A (zh) * | 2008-01-14 | 2008-07-09 | 张尧森 | 网页上实现的即时通讯的方法 |
CN102957627A (zh) * | 2012-11-19 | 2013-03-06 | 浪潮电子信息产业股份有限公司 | 一种基于tcp长连接的提高数据传输效率的方法 |
CN103618741A (zh) * | 2013-12-09 | 2014-03-05 | 惠州华阳通用电子有限公司 | 一种tcp长连接通信系统及方法 |
CN108073414A (zh) * | 2016-11-15 | 2018-05-25 | 北京亿阳信通科技有限公司 | 一种基于Jedis的将多线程并发请求合并批量提交并分发结果的实现方法 |
CN106850784A (zh) * | 2017-01-17 | 2017-06-13 | 华东交通大学 | 智能主机与云服务之间的通信方法 |
CN109947636A (zh) * | 2017-12-20 | 2019-06-28 | 浙江宇视科技有限公司 | 异常线程定位方法及装置 |
CN109831474A (zh) * | 2018-11-26 | 2019-05-31 | 阿里巴巴集团控股有限公司 | http长连接的保活系统、方法、服务器及可读存储介质 |
Non-Patent Citations (2)
Title |
---|
A "persistent connection"model for mobile and distributed systems;YoungGuang Zhang;《Proceedings of Fourth International Conference on Computer Communicaitons and Networks-IC3N"95》;20020806;全文 * |
智能家居系统中网关与服务器的连接方案设计;刘新星;《电子设计工程》;20160229;第24卷(第4期);第114-116页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110572474A (zh) | 2019-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2547880C (en) | Improved distributed kernel operating system | |
US8667184B2 (en) | Distributed kernel operating system | |
US8200764B2 (en) | System and method for achieving highly scalable real-time collaboration applications using HTTP | |
CN110297801B (zh) | 基于容错fpga的事务系统的正好一次事务语义的系统和方法 | |
CN108449239B (zh) | 心跳包检测方法、装置、设备和存储介质 | |
CN111427711A (zh) | 一种基于RabbitMQ的消息推送方法 | |
CN1905518B (zh) | 保证数据交换可靠传输的方法 | |
CN110413425B (zh) | 第三方消息回调方法、装置、服务器和存储介质 | |
KR20110076954A (ko) | 저자원 장치에서의 최적화 폴링 | |
US11108890B2 (en) | Management client and device monitoring | |
CN111970092B (zh) | 一种支持可靠性调节的多协议冗余网络异步通信方法 | |
CN105141603A (zh) | 通信数据传输方法及系统 | |
CN110572474B (zh) | 用于嵌入式终端长连接通讯的方法 | |
CA2562182C (en) | Method for handling communications over a non-permanent communication link | |
JP7030217B2 (ja) | メッセージ送受信方法、通信装置、及びプログラム | |
WO2011017814A1 (en) | System and method for multiport automation | |
CN115361348B (zh) | 由数据采集设备执行的与web浏览器通信的方法 | |
US9300561B2 (en) | Business intelligence-infused smart retransmission processing | |
CN114051030B (zh) | 通讯方法、通讯装置、智慧社区系统和存储介质 | |
CN112367265B (zh) | 一种适用于窄带弱连接网络的可靠数据传输方法和装置 | |
KR102200590B1 (ko) | 엠큐티티 프로토콜 기반 긴급 메시지 처리 장치 및 방법 | |
CN107623645A (zh) | 一种基于数据流转发的电力系统实时数据交换系统 | |
CN114039881B (zh) | 一种通信连接监控方法 | |
CN113347151B (zh) | 一种基于socket共享内存的数据交互方法 | |
CN111092712B (zh) | 一种时间触发以太网抢占式调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |