工业手持终端的通信设计
2015-12-20王银俞建定王新彪万旭东
王银,俞建定,王新彪,万旭东
(宁波大学信息科学与工程学院,浙江 宁波 315211)
工业手持终端的通信设计
王银,俞建定,王新彪,万旭东
(宁波大学信息科学与工程学院,浙江 宁波 315211)
该通信方案以工业手持终端现场应用为背景,针对传统以太网在工业通信中实时性差的问题,提出了一种发送心跳包,建立socket长连接的方法,由此来减少通信过程中频繁建立和关闭连接所消耗的时间。运用XMPP协议实现轻量级、简单实用的消息推送组件,可以进行服务端消息推送从而代替了传统的客户端轮询机制,缩短了响应时间,提高了整个系统的实时性。
手持终端 socket 心跳包 消息推送 实时性
1 引言
近年来,由于以太网开放程度高、数据吞吐量大、通信速率快等特点,使其成为各行各业最受欢迎的通信网络之一。它不仅垄断了办公自动化领域的网络通信,而且广泛应用于工业控制领域资源管理等中上层通信网络,并有向下应用于工业控制现场的趋势。实时性差是它应用于工业现场的一大障碍。为解决上述问题,人们提出了很多方法,如在原有以太网基础上修改开发新的实时通信协议,但这又面临着开发难度较高且周期漫长的问题;又如对原有硬件进行改动等方法,但这些又无疑加大了工业的应用成本。为此,本文提出了一种基于socket的局域网实时通信的设计和实现方法,并深入探讨了socket的工作原理和通信方式。而且结合实际应用需要,详细阐述了通过心跳机制和消息推送的方法来提高工业终端实时通信的原理及其实现流程。
2 Socket的工作原理和运行过程
Socket又称套接字,是对传输层协议(UDP和TCP)的一种封装。应用层的程序通过传输层协议进行数据的传输,而socket的作用是将应用层的程序添加到网络中,然后和其他处于同网络中的应用层程序进行通信。简单来说,socket是传输层供给应用层的函数调用接口,它提供了程序内部与外界通信的端口并为通信的双方提供了数据传输的通道。Socket的工作原理如图1所示:
图1 Socket的工作原理
2.1 Socket通信方式
根据不同的通信协议,socket共有3种常见的通信方式:原始套接字(sock_ram)、数据报套接字(sock_dgram)、流套接字(sock_stream)。流套接字是面向有连接的传输协议,能提供可靠的数据传输,但是频繁的数据传输,会多次建立、关闭连接,消耗的时间久,影响传输的实时性;数据报套接字是无连接的传输协议,数据传输速度快,但是不能保证数据传输的准确性;原始套接字能直接访问底层协议,主要应用于一些协议的开发,功能虽然强大但使用较为不方便。
考虑到手持终端主要应用于工控领域,应该在保证数据准确性的前提下,再去考虑数据传输的实时性。因此选择面向有连接的能提供可靠数据传输的TCP协议来进行传输。TCP连接通信程序设计框图如图2所示。
2.2 TCP连接传输模型
图2 TCP连接通信程序设计框图
运用TCP协议,正常情况下的数据包传输过程为:建立连接→数据传输→关闭连接→建立连接→数据传输→关闭连接→……→关闭连接,传输模型如图3所示:
图3 TCP传输模型
由图3可以看出,每次数据传输,TCP协议都要建立连接和关闭连接。每次TCP建立连接需要3次握手才能建立成功,对实时性要求高的场合,这种传输方式太浪费时间。若一次连接建立成功后,每次数据传输完成都不再关闭连接,下次若有数据包需要发送时,则不用再建立和关闭连接,而是直接进行数据包发送。这样就可以避免中间环节频繁建立和关闭连接消耗大量时间,传输速度因此会提高很多,实时性得到很大改善。
根据上述分析,若建立这样的连接后,不主动人为关闭它,则认为如果没有特殊情况影响,其会一直处于连接状态。但是在实际应用中,若服务器与客户端在一段时间内没有传输数据时,其连接可能会变成“休眠”状态,甚至断开;其次,中间节点若出现什么故障也是难以知道的,造成用户不能及时地发现和解决问题。若出现上述两种状况,用户的状态就可能得不到实时有效的更新,造成的损失也是无法预知的。因此,如果想维护、检测连接,则需要在服务器和客户端制定一个通讯协议。每隔一定时间,若没有数据传输,则由一方发起,向对方发送数据包。若对方收到这个数据包,则按指定好的通讯协议回一个数据包;若发起方没有收到回复,则判断网络出现问题,服务器可及时地断开连接,客户端也可以及时得到重连的机会,这样的协议类似于心跳机制。
3 心跳机制
3.1 心跳原理分析
心跳模型旨在让客户端和服务器获取对方的连接状态,以保证连接正常,顺利进行通信服务。
常规的心跳机制有2个特征。特征一,它像心跳一样每隔固定时间发一次,服务器收到心跳包后,返回给客户端一个数据包,客户端若在规定的时间内没有收到该心跳数据包,则判断为连接断开,通信异常。特征二,心跳协议数据包的主动发送方既可以是服务器,也可以是客户端,但考虑到易操作性和效率,选择客户端作为主动发送方,给服务器发送心跳包。
通过上述了解可知,心跳旨在维护连接、检测连接状态。在传输数据很频繁的时间段,这种心跳机制(特征一)就没有必要了,而且还会占用带宽,降低网络通信效率。因此,本文将在此心跳机制的基础上,修改原有心跳机制的弊端。若一段时间内有数据传输时,就取消心跳包的发送,不再像原有的机制那样每隔固定时间发送。下面将详细介绍具体的实现过程。
3.2 心跳包模型实现
出于上述这些因素的考虑,可以设计如下的心跳机制。当本次数据发送完毕后,立刻启动一个超时定时器,若在定时时间到期之前有数据传输时,则关闭超时定时器,不再额外发送心跳数据包;如果在定时时间到期之前没有发生有效的数据传输,客户端发送一个心跳包给服务器,此时根据网路的不同状况,会出现网络正常连接、网络异常连接两种情况。如果网络正常连接,客户端向服务端发起心跳包,服务端收到心跳包后立刻向客户端发出ACK心跳回复包。客户端收到ACK心跳回复包后,超时定时器清零重新开始计时,如果总线还是处于空闲状态,将进行下一次的循环。如果网络连接异常,客户端向服务端发起心跳包,在定时时间内服务器端没收到心跳包,客户端再次发出ACK心跳包,客户端连续发送2次心跳包后服务端若还没收到ACK心跳包,则给出连接中断信息并进行报警提示,进行重新连接。
在上述内容的基础上,心跳程序模型设计可按图4所示的流程实现:
图4 心跳模型程序设计
3.3 心跳机制下TCP连接传输模型
实现上述心跳模型后,在超时定时器的规定时间段内没有数据通信时,定时发送数据包(心跳),以维持连接状态。数据传输的过程如下:建立连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→数据传输→……→关闭连接,TCP简化传输模型如图5所示:
图5 TCP简化传输模型
通过和图3比较,此连接一旦建立,中间就不再关闭。再次传输时,不用建立TCP连接,也就不需要握手过程,避免了频繁建立连接和关闭连接消耗时间的问题,加快了后续请求的响应时间,提高了系统的实时性。
4 消息推送分析
当前开发的大部分客户端应用,基本上都需要和服务器进行交互,即上传数据到服务器的同时从服务器上获取数据。一般情况下,客户端与服务器之间进行通讯,客户端是主动的,服务器不能主动向客户端发消息,只能被动地等待客户端来取消息。实时通信已经变成了伪实时,从数据的发送和接收间隔来看,会有很大程度的延迟,这种方式使数据传输失去了它的实时性。为了消除以上传输方式的弊端,让客户端及时收到服务端所发送的数据,通信方案有:一是使用Pull(拉)的常规方式,客户端定时向服务器发送查询命令数据,看是否有更新的信息出现,服务器有变化或者有通知时,客户端把相应消息取回;二是使用数据推送(Push)的方法,若服务器端有新的数据更新,就主动推送给客户端,这样客户端就能自动地接收到消息。以上2种机制和C语言中的轮询和中断类似,显而易见Push方式的推送比Pull方式的轮询更优越,效率更高。
4.1 消息推送解决方案
目前推送方案有很多,但是针对具体的实际应用,面临的问题还很多。比如,谷歌推出的C2DM云端推送方案,它提供服务器向应用程序发送数据的服务,该服务可以让移动客户端直接与服务器进行通信,客户端能很快地从服务器得到更新的数据和消息通知。但该方案存在的主要问题是C2DM需要应用谷歌公司的服务器,涉及到安全性问题,所以不可用。其次,国内也有一些第三方推送平台可供使用,但是涉及到收费问题、保密问题、服务质量问题、扩展问题等,不得不使我们望而却步。因此,我们针对实际的应用环境,提出了自己的方案:基于可扩展通讯和表示协议(XMPP)来开发定制自己的数据推送机制。
XMPP是在可扩展标记语言的协议基础上开发出来的,它继承了XML环境中灵活的发展性,具有超强的可扩展性。而且,XMPP包含了针对服务器端的软件协议,使之能与其它客户端进行通话,这使得开发者更容易开发建立客户应用程序或给一个系统添加新的功能,用于即时通讯(IM)以及在线探测。
利用XMPP协议的这些特性,设计了一个轻量级、简单实用的消息推送组件。原理如下:从一个客户端到另一个客户端的所有消息和数据都要通过XMPP服务器,在客户端连接服务器时,服务器则运用自身的目标机注册信息系统对其进行注册认证;在数据传输过程中客户端指定目标地址后,服务器根据指定的目标地址在注册信息系统查找到目标机信息,然后把该目标机状态信息通知给即将发送数据的客户端;判断连接并进行相互认证后,若连接正常,客户端之间就可以进行数据交互,若连接失败,则进行提示,不再发送数据,重新认证连接正常后再发送,这样既能保证数据不丢失,又不至于发错数据。
消息推送组件由服务器部分和客户端部分组成,每一部分都由XMPP协议组件和外部接口组件构成。XMPP协议组件负责服务器和客户端间的连接管理、消息通讯。外部接口组件负责接收应用系统、客户端应用的命令,向应用系统发送接收到的通知消息。消息推送设计与实现原理模型如图6所示:
图6 消息推送设计与实现原理模型
此消息推送组件在服务器端具备消息存储、消息重发等功能。在客户端部分具备断线重连、收到确认、阅读确认、消息发送、命令执行等功能,确保消息能够推送到客户端,同时也保证客户端能够收到并阅读消息。客户端应用和消息推送组件完全分离,通过接口相互调用,实现模块应用的最优化,系统集成简单,无需复杂的设置。
5 结束语
本文针对工业移动终端的应用背景,系统地分析了socket通信中的一些特性。提出了一种用于维护连接的心跳机制,并运用XMPP协议实现了一种轻量级服务器和客户端推送模型。详细介绍了设计原理和具体实现流程。运用上述2种方案,系统在数据传输时,客户端给服务器发送数据,服务器给客户端推送数据,可实时收发信息。当长时间没有数据通信时,服务器和客户端会发送保持连接的心跳数据包,同时避免了“假在线”或连接“休眠”状态并能及时更新用户状态。
[1] 陈磊,冯冬芹,金建祥. 以太网在工业应用中的实时特性研究[J]. 浙江大学学报, 2004,38(6): 670-675.
[2] 罗湘平. 基于工业以太网的智能控制器设计[D]. 大连:大连海事大学, 2011.
[3] 李慧,刘星桥,李景,等. 基于物联网Android平台的水产养殖远程监控系统[J]. 农业工程学报, 2013(13): 175-181.
[4] 宋宝,姚军,杨勇泉. 数控机床远程监控平台开发和实现[J]. 组合机床与自动化加工技术, 2012(12): 79-81.
[5] 梁田. 融合移动支付平台中前置系统的设计与实现[D].北京: 北京邮电大学, 2013.
[6] 王浩亮,白晨明. 基于一卡通系统的校安平台建设[J]. 数字技术与应用, 2013(6): 114-114.
[7] 庞国明. Android推送服务的应用开发[J]. 电脑编程技巧与维护, 2013(19): 51-55.
[8] 杨杰. 基于Android平台的校园新闻客户端的设计与研发[J]. 现代计算机, 2013(7): 64-88.
[9] 于少山,卡米力,毛依丁. 基于XML的即时通信系统的研究与实现[J]. 重庆邮电大学学报: 自然科学版, 2007(B06): 59-61.★
王银:硕士就读于宁波大学,研究方向为移动通信在嵌入式系统的应用、现场总线通信。
俞建定:硕士研究生导师,宁波大学副教授,主要研究方向为嵌入式系统应用、现场总线通信研究应用、移动设备的技术研究和产品开发。
王新彪:硕士就读于宁波大学,研究方向为移动通信在嵌入式系统的应用、现场总线通信。
Communication Design of Handheld Terminal in Industrial Application
WANG Yin, YU Jian-ding, WANG Xin-biao, WAN Xu-dong
(Faculty of Electrical Engineering and Computer Science, Ningbo University, Ningbo 315211, China)
On the background of handheld terminal fi eld application in industrial application, a method in which heartbeat packet can be sent and socket long connection can be established was proposed according to the bad real-time of traditional Ethernet in industrial communication. It can reduce the time consumed by frequently establishing and closing connections. XMPP protocol is adopted to realize the lightweight, easily practical message push component. Because message can be pushed to server by means of the protocol, the traditional polling mechanism in server is eliminated. The proposed method can reduce response time and enhance the system real-time.
handheld terminal socket heartbeat packet message push real-time
10.3969/j.issn.1006-1010.2015.07.014
TP393
A
1006-1010(2015)07-0066-05
王银,俞建定,王新彪,等. 工业手持终端的通信设计[J]. 移动通信, 2015,39(7): 66-70.
2014-12-30
责任编辑:刘妙 liumiao@mbcom.cn