基于WebSocket的车辆GPS信息实时推送系统的实现
2017-08-08陶智勇
钟 波,陶智勇
(武汉邮电科学研究院 湖北 武汉430065)
基于WebSocket的车辆GPS信息实时推送系统的实现
钟 波,陶智勇
(武汉邮电科学研究院 湖北 武汉430065)
文中针对车辆管理系统中如何实时获取车辆定位信息问题,采用缓存数据库实现对终端实时反馈的GPS信息进行存储,推送服务器利用Websocket将缓存数据库中数据的变动情况进行处理并将处理结果推送至Web应用,从而实现车辆GPS信息在地图上进行图形展示,并进行实时追踪。当然利用该系统也能实现实时报警信息的推送,从而实现监控人员的对此类情况的及时处理,从而避免产生严重的灾难及后果。
WebSocket;实时定位;缓存数据库;数据推送;Spring
随着物联网技术的发展及日趋成熟,人们与普通万物联系愈发紧密,对事物实时信息的需求也更加强烈,尤其是作为传统运输业,对车辆信息的准确把握已经不仅仅涉及到公司自身车辆安全、管理的范畴,更与用户体验联系紧密。传统C/S系统通常通过TCP协议进行通信[1],使用socket编程实现客户端与服务器端的双向通信非常容易,会导致长期占有连接资源的缺陷;而基于HTTP协议的Web应用实现这种C/S的双向通信虽然理论上可以实现[2],但是有请求过多等弊端。
1 WebSocket协议
1.1 协议机制
WebSocket协议是Html5提供的一种在单个TCP连接基础上进行全双工通讯的协议[3],虽然WebSocket协议本质上基于TCP协议,由于HTTP协议的广泛应用于B/S,因此该协议延续并从HTTP过度而来,利用HTTP的协议来完成一部分握手。它在HTTP协议中多了Upgrade、Connection两项,这两项是浏览器客户端用来告诉服务器发出的请求是WebSocket握手请求报文;在服务器进行报文解析的过程中,会对Sec-WebSocket-Key处理并生成相应的Sec-WebSocket-Accept字段值,当服务器发送响应报文之后即表明服务器端已完成向WebSocket协议的升级;客户端则会根据服务器端响应的报文首先对Sec-WebSocket-Accept字段进行验证,并根据验证结果来确定是否完成握手,从而建立相应的WebSocket协议连接;完成握手之后,也就完成了从HTTP协议向WebSocket协议的Upgrade,WebSocket协议发生作用,当服务器端有数据产生时就能够实时地推送给客户端[4]。
1.2 WebSocket协议优势
常见的基于HTTP的服务器推送服务的实现是基于轮询、长轮询、长连接。轮询是通过客户端定时向客户端发送HTTP请求,然后根据服务器响应来进行客户端数据变化,一方面会带来大量的HTTP请求[5],而且往往只有当服务器端准备好数据之后的一个请求是有价值的,大量的无效请求必然会带来网络拥塞,增加不必要的带宽损耗;另外请求过多必然会造成服务器资源的不必要开销。长轮询为了减少HTTP请求对定时轮询进行了改进,当server端没有数据更新时HTTP连接会保持一段时间,直到数据变化或者过期,但其本质上还是基于HTTP请求[6]。长连接则是在客户端与服务器之间建立一个长期有效的连接来保证服务器向客户端推送数据,当有大量客户端连接服务器时大量的连接必然会造成服务器端资源的紧张。WebSocket协议是将HTTP协议提升而来,每次只用发生一次HTTP请求,避免了不必要的带宽浪费,同时也减少了服务器端资源的开销[7]。
2 车辆GPS信息实时推送系统架构设计
车辆GPS信息实时推送系统架构如图1。该系统主要由终端处理、后台推送、前台显示3个核心模块来进行相关的业务数据处理,数据的存储主要是根据是否是实时数据来进行区分存放,实时数据存入缓存数据库(Redis),其他数据存入非缓存数据库(Mysql、Oracle 等)中。
图1 系统架构图
GPS数据流向如图2。车辆GPS信息根据部标JT/T808协议传输到终端交互服务器,进行解码、数据分类,根据不同的需求将GPS信息分别存到Oracle数据库、缓存数据库;实时推送服务从缓存数据库中读取车辆GPS信息并实时推送到Web应用服务器;Web应用服务器将GPS信息进行界面展示给客户端[9]。
图2 数据流向图
2.1 车辆终端
负责货运任务的车辆GPS信息会发生频繁变化,运输公司对所属运输公司车辆GPS信息进行实时接收处理,能够保证车辆按照既定运输任务行驶,及时发现违规情况;同时能够清楚了解运输任务的完成进度,做好调度策略;当车辆遇到紧急情况时,能够立即定位到车辆所在地信息,实施应急处理。
2.2 终端交互服务
终端交互服务负责与车辆终端进行交互,主要包括数据接收和信息下发。数据接收通过接收车辆终端发送的GPS封装信息,进行协议解析将GPS信息从协议信息中剥离出来,根据不同的需要将GPS信息分别进行存储[10]。信息下发则主要是将需要发送给终端的数据进行协议封装,发送到终端。本文主要针对GPS信息进行实时推送,进行相应的交互处理。
2.3 数据库
数据的存储由于涉及到两类不同的需求,因此产生的数据往往需要存在不同的数据库中。Oracle关系数据库主要是用来将GPS信息做长期持久化,存储终端的任意时间段内的GPS信息,这些历史GPS信息可用于对车辆历史运行轨迹、线路、历程等进行分析、处理并展示。缓存数据库主要鉴于缓存数据库的查询I/O速度快、定时清理数据库无效记录的特点[11],因此仅仅用来保存车辆终端的实时GPS信息,推送至Web服务器进行前台界面显示。
2.4 GPS信息推送服务
GPS信息推送服务主要是基于WebSocket协议来完成。GPS信息推送服务端通过WebSocket协议API与Web应用客户端建立连接;然后读取缓存数据库中存储的车辆终端GPS信息,再将数据推送至Web应用服务器,从而实现车辆终端数据最低延迟地推送到Web应用服务器端进行数据的展示[12]。由于WebSocket协议最终建立的是是双工的,因此同样支持Web客户端向信息推送服务端传递数据,从而实现数据流向的双向封闭回环。
2.5 Web应用客户端
Web应用客户端主要作为车辆终端GPS信息的最终使用者。通过WebSocket协议接口接收信息,利用得到的GPS信息在ArcGIS地图上进行车辆定位信息地实时标注,管理人员从而能够对车辆进行实时监控,实时了解车辆动态信息,便于管理人员对公司车辆实时调度、应急处理等。Web应用客户端实际是一个管理平台系统还包括到司机信息、运单管理、应急处理、车辆调度、监管服务、数据分析、决策支持、指令下发等功能模块,实现实时数据、非实时数据之间的交叉互动,为企业提供更便捷、更精准的运输业务管理。
3 GPS信息实时推送实现
3.1 API接口介绍
3.1.1 Html5中WebSocket接口
WebSocket API提供了简单的语法,能够为服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允许跨域通信[13]。WebSocket为指定目标创建,用于双向推送消息。
1)WebSocket实例创建初始化
Html5中建立WebSocket实例相当简单直接调用new WebSocket(‘’);参数设置需要为连接的服务器端的地址,WebSocket协议的URL使用ws://开头,另外安全的 WebSocket协议使用 wss://开头[14]。
2)onmessage事件
客户端与服务器建立连接之后,当服务器端需要向客户端推送数据时,就会通过建立的WebSocket相应的API向客户端发送数据,此时就会触发WebSocket的onmessage事件,调用onmessage方法告诉客户端有数据推送过来,需要处理。此时客户端可以根据需求重写onopen事件方法将推送来的数据进行处理。onmessage事件提供了一个data属性,它可以包含消息的Body部分。
3)send方法
当客户端需要向服务器端传输数据时,就可以调用send方法来完成。注意:send方法的调用必须在客户端与服务器建立了WebSocket连接之后,因此,send方法调用一般会写在onopen事件方法中来完成。
3.1.2 Spring中WebSocket接口
现在主流的web容器基本均已支持WebSocket,但各容器的WebSocket接口都不尽相同。为了统一WebSocket实现,便于今后在不同web容器间的移植,这里使用SpringWebSocket框架集成。
1)ServletWebSocketHandlerRegistry类
Spring中使用 ServletWebSocketHandlerRegistry类注册WebSocket处理器,该类实现了WebSocketHandlerRegistry接口,主要使用核心方法addHandler,通过调用该方法建立WebSocketHandler与Servlet容器中使用的URLs的映射关系。
2)WebSocketHandlerRegistration接口
该接口主要用来为指定的WebSocketHandler提供相关的配置方法接口,主要方法addInterceptors,为handshake请求配置相应的拦截器。
3)HttpSessionHandshakeInterceptor类
该拦截器类特殊之处在于能够将HTTP session中的属性信息拷贝到自身的 handshake attributes中,可以通过getAttributes方法取出相关的状态信息进行对应的处理。beforeHandshake方法会在建立连接握手前被触发,此时可以根据handshake attributes属性来进行确定是否建立连接,从而实现权限控制。afterHandshake方法则会在握手结束时被触发,此时可以根据相应的response的状态和头信息来进行判断此次handshake是否成功来进行相关的善后工作的处理,实现友好用户界面提示。
4)WebSocketHandler接口
该接口实现WebSocket连接后进行实质性业务逻辑处理的接口,要求Websocket连接的处理类必须实现此接口。该接口的核心方法:after Connection Established、handleMessage。afterConnectionEstablished方法会在双方通过WebSocket协议建立完整连接之后被触发,该方法会传入WebSocketSession参数,此时可以根据该参数中从对方传入的数据进行相关的处理。handleMessage方法则是最为核心的方法,该方法会在每次有新的WebSocket信息从对方到达时被触发,此时会传入一个WebSocketMessage参数,该参数封装了从对方来的数据信息,同时还有WebSocketSession参数来进行识别消息来自哪个客户端。
3.2 系统实现
3.2.1 Web应用端界面实现
1)WebSocket初始化
在JSP页面中,直接进行WebSocket实例建立,target设置为服务器的地址,同时传入用户的账号、部门代号来作为连接建立WebSocket连接的验证信息;同时根据用户编码、部门来确定所监控车辆,从Redis缓存数据库中读取车辆GPS信息[15]。具体实现如下:
2) WebSocket连接、数据传输
界面定义了一个监控列表ViewTable进行列表显示车辆的GPS信息,该列表的表头信息会根据所选择的车辆信息发生改变,从而调用的changeSend方法。该方法会先调用定义的WebSocket的getWs()方法,获取相应的连接;然后调用send方法将数据信息发送给推送服务服务器端。其中重写了WebSocket相关的 onopen、onClose、onError方法进行连接、关闭、出错信息的处理,实现友好用户交互界面;重写onMessage方法[16]。
3.2.2 GPS信息推送推送服务端接口实现
1) 注册在 SpringServlet容器中利用WebSocketHandlerRegistry建立对应URL的拦截器和处理器拦截器。
2)拦截器
HandshakeInterceptor作为拦截器继承HttpSession HandshakeInterceptor类,重写了相关的beforeHandshake、afterHandshake方法。before Handshake方法对连接进行预处理,对发起的请求的session中的的usrname、departmentCode属性进行封存至HandShake Attributes中。afterHandshake方法则主要是进行控制台显示提示,表明连接已经建了。
3)处理器
处理器实现类SystemWebSocketHandler主要实现了WebSocketHandler接口的after Connection Established 方法、handleMessage方法、after Connection Closed方法;此外,还有负责推送的私有方法:sendSingle方法、getJson方法、getVids方法。after ConnectionEstablished方法负责在连接建立之后根据userCode、departmentCode来设定缓存数据库相应数据集,进而促使终端交互服务器开始从终端获取对应车辆终端GPS信息并保存至redis数据库;当真正有数据请求从客户端发送过来时,会触发相应的handleMessage方法,该方法会调用相应的getVids方法、sendSingle方法,来完成所请求的车辆的GPS信息的读取、处理、发送。
4 结 论
通过利用缓存数据库快速存取的特点,基于WebSocket协议将从终端交互服务器取得的车辆定位GPS信息通过推送服务推送到web应用客户端;Web应用客户端利用GPS信息将车辆以可视化的地图、列表等形式将展现出来,实现客户端对所属车辆的位置信息的实时掌控,更加利于企业实现高效、便捷管理。由于系统中数据流向经过多个节点,必然导致数据的实时性降低[17]。因此,进行模块集成,缩短数据流通环节,从而实现更低延迟,是未来此类系统研究的主要方向。
[1]刘犇,王猛.基于服务器推送技术的Web数据实时更新[J].电脑开发与应用,2011,24(6):1-2.
[2]张丽.服务器推送技术在Web中的应用研究[J].新乡学院报,2010,27(4):1-3.
[3]龙奇.下一代Web通信技术HTML5 WebSocket的研究[J].科技信息,2011,11( 36):273.
[4]温照松,易仁伟,姚寒冰.基于WebSocket的实时Web应用解决方案 [J].电脑知识技术,2012,8(16):3826-3828.
[5]李代立,陈榕.WebSocket在Web实时通信领域的研究[J].电脑知识与技术,2010,6(28):7923-7925,7935.
[6]郑强.web服务器推送技术的设计与实现 [D].北京:北京邮电大学,2013.
[7]廖清平.基于Web的服务器的Push技术研究和应用[D].广州:中山大学,2013.
[8]PeterLubbers.HTML5Programing—UsingtheHTML5 WebSocket API[M].Apress,2010.
[9]郭欣.基于HTML5的通用WebIM组件的前端设计与实现[D].西安:西北工业大学,2011:21.
[10]肖在昌,杨文晖,刘兵.基于WebSocket的实时技术[J].网络与通信,2012(12):41.
[11]柯昌正,黄厚宽.AJax技术的原理与应用[J].铁路计算机应用,2007,16(1):1-2.
[12]吴晓东,王鹏.Html5的通信机制及效率的研究[J].长春理工大学学报,2011,34(4):159-160.
[13]鄢金端,夏吉广,张爱玉.服务器推送技术在智能仓储物联网中的应用[J].警察技术,2013(2):19-22.
[14]江连峰,赵佳宝.复杂事件处理技术及其应用综述[J].软件,2014(2):188-192.
[15]费日东,李定主.服务器推送技术研究[J].电脑知识与技术,2012(7):1516-1517.
[16]杨金玲,曲建光,曹先革,等.基于应用技术型大学战略 转型的GIS实践教学体系构建[J].测绘工程,2015,24(2):78-80.
[17]姜毅,王兆青,曹丽.基于HTTP的实时信息传输方法[J].计算机工程与设计,2008,29(10):1-4.
Implementation for system of real-time pushing vehicle’s GPS information based on WebSocket
ZHONG Bo,TAO Zhi-yong
(Wuhan Research Institute of Post and Telecommunications,Wuhan 430065,China)
In order to solve the problem that how to get vehicle ‘s GPS information in vehicle management system in real-time,this paper use cache database to save the Real-time GPS information from the interactive terminal server;and then the pushing service pushes the newest GPS information to Web application client。The client utilizes the GPS information to mark the vehicle on the map or show on the datagrid,monitors the vehicle in Real-time.Of course,we can also take use of this system to push the alarming information to handle some emergencies in Real-time.In this way,some more serious disasters will be avoided.
WebSocket;real-time location;cache database;push data;Spring
TN919
:A
:1674-6236(2017)13-0048-05
2016-06-19稿件编号:201606128
钟 波(1990—),男,湖北随州人,硕士研究生。研究方向:互联网技术。