基于WebSocket和Redis的移动目标轨迹跟踪系统设计与实现
2021-09-05魏江东涂继辉赖少东高梦然
魏江东 涂继辉 赖少东 高梦然
摘 要: 针对物联网系统中监控移动目标位置和轨迹信息的需求,设计和实现了一种基于Websocket和Redis移动目标轨迹跟踪系统。该系统主要分为三个部分:首先利用手机App客户端采集移动目标的轨迹信息,然后利用Webocket将轨迹信息传输到远程服务器进行保存,最后服务端将传送的轨迹信息保存在Redis+MySQL数据库中,并根据客户需要实现轨迹信息的查询和在地图上进行轨迹重现。经过测试表明,该系统能够准确、实时地获取移动目标的轨迹信息,并进行有效的存储,这为物联网移动目标的轨迹跟踪提供了较好的解决方案。
关键词: 移动目标跟踪; WebSocket; 轨迹重现; Redis
中图分类号:TN919.3;TP311.1 文献标识码:A 文章编号:1006-8228(2021)08-76-05
Design and implementation of moving target tracking system
based on WebSocket and Redis
Wei Jiangdong, Tu Jihui, Lai Shaodong, Gao Mengran
(Electronic Information Collage of Yangtze University, Jingzhou, Hubei 434023, China)
Abstract: In response to the need to monitor the location and trajectory information of moving targets in the Internet of Things system, a moving target trajectory tracking system is designed and implemented based on Websocket and Redis. The system includes three parts, collecting the trajectory information of the moving target by using the mobile App client, transmitting the trajectory information to the remote server for storage by using Webocket and saving the transmitted trajectory information in the server with Redis+MySQL database, which realizes the tracking information query and the trajectory replay on map according to the needs of customer. Tests show that the system can accurately obtain the trajectory information of the moving target in real time and store it effectively, which provides a better solution for the trajectory tracking of moving target in the Internet of Things system.
Key words: moving target tracking; WebSocket; trajectory replay; Redis
0 引言
物联网作为新一代互联网信息技术已经应用到我们生活中的各个领域,而移动目标的轨迹信息跟踪和监控是物联网技术中非常重要的环节,它能较好的了解物联网中终端节点的位置信息以及移动情况,因此,实时、准确和高效地对移动目标轨迹信息进行跟踪和保存是物联网系统研究的热点。
目前应用广泛的移动目标轨迹跟踪系统多以车载GPS终端与基于B/S的Web方式实现,系统中传统的HTTP请求方式带来了大量的无效请求,造成了服务器资源的不必要开销,同时,传统的MySQL数据库存取数据较慢,交互方式存在一定的延迟,而基于PC端查询物流、巡逻等工作移动目标轨迹跟踪的系统,无法满足用户实时性、便携性的需求,小规模企业与零散客户也难以承担类似系统的开发成本[1-2]。
针对以上问题,本文设计并实现了基于WebSocket和Redis的移动目标轨迹跟踪系统,以Android App作为客户端,提高了系统在物联网中使用的便捷性,实现了高效的通信机制与数据存储方式。
1 系统总体结构设计
本文设计的移动目标轨迹跟踪系统如图1所示,整个系统主要分为三个部分:移动目标轨迹采集和显示模块、数据传输和接收模块以及服务端存储模块。移动目标轨迹采集和显示模块主要是在Android平台利用手机App结合百度地图实现,数据传输和接收模块主要是利用WebSocket方式进行通信,服务端采用Redis+MySQL数据库进行数据的存储。系统总体结构如图1所示。
2 系统具体实现
2.1 移动终端模块实现
移动终端作为用户与物联网移动目标轨迹跟踪系统交互的入口,选择Android App作为客戶端,需要实现用户信息、照片处理和轨迹跟踪三个功能模块。三个功能模块的UI界面设计都是采用Android基本布局中的相对布局RelativeLayout、线性布局LinearLayout、表格布局TableLayout相结合的形式。客户端的功能模块如图2所示。
在用户信息模块中,包括用户注册、登录、个人信息编辑。用户注册时,先填写个人信息,然后客户端将用户信息提交到服务器,服务器判断数据库中用户表中是否已存在该账户,若存在,则显示“该用户名已存在,请修改”,若不存在,则新增用户到数据库中。用户登录时,用户需提前设置服务器地址及端口,当用户登录后,客户端将登录信息发送至服务器,由服务器与数据库交互核对数据并给予反馈。个人信息编辑则是对个人信息的完善,比如上传图片、填写地域信息等。
照片处理模块为用户在移动过程中,通过拍照或上传相册照片来主动反馈自己的位置信息。此模块实现了拍照加载图片、本地照片加载、图片裁剪处理与图片上传功能。图片的加载部分都是先通过裁剪图片的uri获取Bitmap对象,然后使用ImageView组件的方法setImageBitmap()将图片加载显示出来。图片的裁剪处理采用android系统自带的裁剪功能,通过intent.putExtra设置合适的裁剪框形状和大小。同时,本文借助了网络请求库OkHttp,使用HTTP协议的POST方法实现图片上传功能。
轨迹跟踪模块主要是依托百度地图SDK [3]进行开发。在使用百度地图免费API接口提供的各种功能之前,先要在百度地图官网申请一个百度地图开发密钥,才能在程序中使用百度地图提供的地图服务、定位服务及数据服务等。在满足实时定位的基本功能后,该模块的关键问题是对轨迹点信息的采集,本文利用百度地图SDK自定义一个定位监听类LocationListener,并实现其中的方法来获取用户的位置。其中,定位方式有网络定位和GPS定位两种,使得定位更加精确。而对于移动目标轨迹点的采集时间,本文设置为每隔一秒采集一次,主要考虑其时间过长导致轨迹不够完整,过短则造成采集频繁,产生不必要的数据消耗。定位中利用location.getLatitude()、location.getLongitude()方法分别获取该轨迹点的纬度和经度,最后将所有的轨迹点信息保存到点集合List中。当用户提交轨迹信息时,使用WebSocket协议上传到服务器,服务器将轨迹信息保存到Redis数据库中[4]。轨迹重现主要是服务器将数据库中获取类型为List的轨迹信息点集合发送给客户端,然后通过客户端创建地图覆盖物OverlayOptions对象来设置绘制折线的相关属性,并将轨迹点添加到地图上,同时将这些轨迹点依次使用折线相连,在百度地图上进行绘制,最终实现物联网中移动目标的轨迹重现。
为了优化客户端与服务端之间的通信,减少HTTP协议的无效请求[5],本系统的通信协议主要采用WebSocket协议[6]。WebSocket是一款html5推出的协议标准,它是一种在单个TCP连接上进行全双工通信的协议[7],解决了传统Ajax轮询、Comet技术的弊端,它能主动使服务器向客户端推送消息,解决了服务器资源消耗的问题[8]。在构建客户端的WebSocket接口时,本文采用WebSocket的开源框架Java-WebSocket。首先创建一个WebSocketClient类对象,然后重写该类中的四个方法onOpen()、onMessage()、onClose()、onError(),分别在WebSocket连接开启时、接收消息时、连接断开时,以及连接出错时调用。重写的onMessage()方法中包含客户端上传信息至服务端以及处理服务端反馈的代码,其中客户端上传的字符串信息需要转化为更加轻量、简洁的Json格式进行传输,同时自定义了java bean类以方便客户端对Json信息进行解析。对于服务端的接口,本文采用高性能的PHP Socket服务框架Workerman进行构建。在加载完Workerman的相关文件后,创建一个Worker对象,搭建起移动终端与服务端之间的通道,然后调用函数onMessage与客户端进行通信。
2.2 服务端的实现
服务端主要包括PHP服务器和Redis+MySQL数据库两部分。
PHP服务器部分主要是对客户端传来的数据进行处理和反馈,同时与Redis数据库交互,实现对数据的存取,然后将数据持久化到MySQL当中。客户端传来的请求主要分为五类,分别是注册信息的存储、登录信息的验证、轨迹信息的存储、轨迹信息的查询以及图片的上传。如图3所示,客户端的每种请求对应一种状态state,然后服务器根据传入的状态调用相应的方法对请求进行处理。同时为了防止用户密码信息泄露,本文还对用户密码使用了Crypt加密。
Redis+MySQL数据库部分负责对数据进行缓存并实现持久化,首先Redis是基于内存的数据库[9],读取速度快,同时其支持的数据结构很适合轨迹信息的存储,因此将系统的热点轨迹信息缓存其中,能够大幅度提升系统的性能;然后,将重要的数据存放于MySQL数据库中实现持久化,防止由于Redis数据库带来的内存增长速度过快,达到最大内存限制,从而导致的数据丢失。对于Redis数据库,本文针对用户信息和轨迹信息的特点,分别采用字符串和hash数据结构来缓存数据[10]。用户信息的存储结构模型如图4所示,键users:count采用字符串结构记录用户的个数;键user.to.id采用hash结构,作用是记录用户名和id之间的映射关系;键user:id也是采用hash结构保存用户的详细信息,包含用户名、密码、email、车牌号等,其中存储的密码是加密后的结果。轨迹信息的存储结构模型如图5所示,键tracks:count采用字符串结构保存轨迹信息的个数;键track:id采用hash結构,存储着轨迹信息的名称、提交时间、所属用户的id、轨迹点坐标等。对于重要或者访问不频繁的数据,我们将其持久化到MySQL数据库中,以varchar类型进行存储,从而能够容纳更多的数据,同时保证数据存储的可靠性。
3 系统测试
3.1 测试环境
在整个测试中安排了50名大学生进行参与,学生以自行车骑行的方式自由绕行整个校园参与测试。对于客户端,测试过程中采用版本Android 7.1的智能手机,而服务端的系统设计环境为Centos 7操作系统,开发工具为PHP 5.6+Redis 5.0+MySQL 5.7,两者通过4G网络进行通信。
3.2 测试结果
移动目标轨迹跟踪系统的移动终端部分操作界面如图6所示。
图6(a)是终端的登录界面,用户在填写服务器地址后,输入账号和密码登录。图6(b)是登录成功后跳转到地图界面,实时显示当前位置为经度112.219674,纬度30.33881,用户点击地图界面左下方的开始按钮进行轨迹记录,然后点击结束来命名轨迹并提交给服务端,若用户需要查看轨迹,只需在上方的搜索框进行搜索,此次保存的轨迹信息为(112.219674 30.33881|112.219754 30.338599|112.219830 30.33827…),并在地图上实现轨迹的重现,如图6(c)所示。
经过反复实验,用户系统的客户端界面操作性好,功能完善,测试人员可以通过此系统了解物联网中移动目标的实时位置,掌握目标的轨迹路线,极大帮助了管理人员对移动目标轨迹路线的评估与分析。
4 结束语
本文设计和实现的移动目标轨迹跟踪系统,以WebSocket协议和Redis数据库为基础,解决了物联网系统中管理人员对移动目标实时位置和轨迹路线掌握难的问题。考虑到现有市场安卓手机的占有率,该系统以Android App为移动客户端,实现了高效的PHP服务器,同时结合了HTTP协议来解决客户端与服务端之间的实时性双向通信问题。经过测试,该系统并发量高,交互性强,操作简便,为物联网中移动目标的实时定位和轨迹监测提供了解决方案,具有良好的市场应用前景。
参考文献(References):
[1] 张舒.面向公路物流的车辆追踪系统设计、实现与优化[D].南京理工大学,2018.
[2] 钟波,陶智勇.基于WebSocket的车辆GPS信息实时推送系统的实现[J].电子设计工程,2017.25(13):48-52
[3] 满红任.基于Android平台的车道偏离预警系统的实现[D].东南大学,2015.
[4] Xiongfei Liu,Jiakang Liu,Beiping Liao,Yunyi Zhu,Huimin
Liu. Design of IoT Web Server Communication Platform based on Netty and WebSocket[A]. Wuhan Zhicheng Times Cultural Development Co.,Ltd.Proceedings of 3rd International Conference on Mechatronics Engineering and Information Technology(ICMEIT 2019)[C].Wuhan Zhicheng Times Cultural Development Co,2019:7.
[5] 覃家皓.基于WebSocket的即時通信研究及其性能分析[J].移动通信,2017.41(12):44-48
[6] 李先懿,郭正光.基于Websocket的车联网报警推送系统[J].计算机系统应用,2020.29(3):127-131
[7] Benfano Soewito, Christian, Fergyanto E. Gunawan, et al.Websocket to Support Real Time Smart Home Applications,2019.157:560-566
[8] 惠苗,赖道健.基于WebSocket协议的即时通讯系统的开发[J].榆林学院学报:自然科学版,2019.29(6):76-79
[9] 马豫星.Redis数据库特性分析[J].物联网技术,2015.5(3):105-106
[10] 曾超宇,李金香.Redis在高速缓存系统中的应用[J].微型机与应用,2013.32(12):11-13
[11] 涂继辉,赵剑.基于WebService的通信实验设备排队系统设计与实现[J].长江大学学报:自然科学版,2015.12(10):44-47,4
[12] 李明珠.基于Android手机的轨迹导航系统的设计与实现[D].长安大学,2013.
[13] 郝帅,程德福.基于Android的航迹指示仪的设计与实现[J].湘潭大学自然科学学报,2018.40(2):50-53
收稿日期:2021-02-04
基金项目:国家自然科学基金(No.61901059);湖北省高等学校大学生创新创业训练计划项目(2019)
作者简介:魏江东(1996-),男,湖北宜昌人,硕士研究生,主要研究方向:深度学习,模式识别,自然语言处理。
通信作者:涂继辉(1979-),男,湖北武汉人,博士,副教授,主要研究方向:图像处理与模式识别,深度学习,计算机网络。