APP下载

基于WebSocket和node.js的多终端数据采集系统研究

2018-01-20蒋凌燕李中科

电脑知识与技术 2018年31期
关键词:数据采集

蒋凌燕 李中科

摘要:随着互联网+的进一步发展,接入网络的设备和需要处理的数据均大量增长,对实时响应的要求也越来越高。根据现在各种场景中人和设备的数据获取、传输、处理、存储的需求,使用各种终端和设备作为数据采集客户端,设计实现基于node.js的多终端数据采集系统来提供高并发环境下的数据采集服务。通过研究和比较实时通讯技术的各种实现方法,采用WebSocket和node.js作为系统的基础支撑技术,分析了系统的核心功能包括数据采集、数据存储、数据显示与搜索等,完善了系统的架构设计。

关键词:数据采集;多终端;WebSocket;node.js;实时通讯

中图分类号:TP311    文献标识码:A      文章编号:1009-3044(2018)31-0006-03

Research on multi-terminal data acquisition system based on WebSocket and node. js

JIANG Ling-yan, LI Zhong-ke

(Nanjing Institute of Industry and Technology, Nanjing 210046, China)

Abstract: With the further development of Internet +, the equipment of access network and the data that need to be processed are all increasing, and the requirement of real-time response is more and more high. According to the demand of large amount of data acquisition, transmission, processing and storage of human and equipment in various application scenarios, using various terminals and devices as data acquisition client, the multi-terminal acquisition system based on node. JS is designed to provide data acquisition service in high concurrency environment. By studying and comparing the various realization methods of real-time communication technology, using WebSocket and node. js as the basic supporting technology of the system, the core functions of the system including data acquisition, data storage, data display and search are analyzed, and the architecture design of the system is perfected.

Key words: data acquisition; multi-terminal; WebSocket; node.js; real-time communication

1 背景

在互联网+的时代,数据采集系统需要处理的用户请求不论是数据的规模还是请求频率都不断提高,同时对于响应的实时性要求也越来越高,因此为了满足需求实时推送和及时响应技术在各种软件系统中大量应用,基于Web的实时通讯技术也在不断地发展中。传统数据采集功能主要面向单个应用,存在功能重复、维护复杂、信息交换共享不足等问题。[1]该文对多终端环境下接入各种设备时的数据采集系统实现进行分析、设计与研究。

2 实时通讯相关技术

在浏览器和服务器之间的常用实时通信技术有以下几种:长、短轮询、长连接,Adobe 的Flash Socket、WebSocket等等。这几种技术各有特点,适用于不同的情况。

2.1 短轮询

短轮询以ajax技术为基础,通过在客户端定时发送重复连接请求来获得新的数据,服务器会立即返回请求,连接时如果客户端数量较多或者传输的数据量较大引起网络延迟均会产生一些问题,适合在数据规模不大的请求频率低且一次性请求较多的应用中使用,一般是中小规模的应用,服务器端程序结构简单编写容易。

2.2 长轮询

长轮询通过在服务器端阻塞用户的请求延迟返回来保持链接,并减少请求的次数,但同时占用一定的服务器资源保持链接线程,适合用户一次请求需要多次发送数据并长时间保持连接的情况,如Web,QQ。长轮询可以通过ajax技术在服务器端挂起请求来实现,客户端使用ajax提交请求并建立连接。长轮询也可以通過iframe实现,主要用于页面动态刷新,多用于实时聊天和信息推送,采用xml和json来进行数据交换,在穿越防火墙保持链接方面兼容性较好,现在使用得非常广泛,大规模应用系统中成功使用,但对服务器数据处理和网络连接的负载要求很高,反复建立链接开销大。

2.3 长连接

长连接技术通过服务器发送事件(Server-Sent Events,简称SSE)提出的API创建请求,通过发送心跳包来维持链接,服务器端和客户端持续交换数据,服务器维持长链接有开销,同时部分代理和防火墙无法穿透,在gmail及时消息中有使用。长连接技术使用不同于长短轮询的方式,所建立的连接可以从服务器端主动推送信息到客户端而不需要客户端反复发送请求到客户端,适合服务器大量推送消息的应用场景。

2.4 Flash Socket

Flash Socket是Flash系列的工具提供的实时发送功能可以保持连接,但是非http协议的,也无法穿越防火墙,客户端也需要安装插件,适用于已使用Flash系列的工具开发的系统中实现实时发送功能,在客户端和服务器系统通过socket建立连接进行通讯,这种实时通讯现在网页游戏互动使用较多。

2.5 WebSocket

HTML5定义了WebSocket协议,目的是在实现服务器实时与用户交换数据同时维持对服务器资源和网络带宽的低耗占用。WebSocket建立在TCP协议的基础上,和已有的几种 web实时通信大多采用http协议不同,WebSocket以事件处理的方式建立双工链接,使用很小报文传送信息从而以较小的代价维持链接,实现了浏览器和服务器之间的双向数据推送,为web模式下的大规模高效的数据实时交换提供另一种模式,解决了HTTP协议下的请求响应模式的一些缺点。WebSocket通过onopen,onmessage,onclose和onerror四个事件来处理整个数据交换的过程,浏览器端中的脚本程序简便易行,服务器端的实现各种技术平台都提供了相应的组件库支持WebSocket服务器端程序。本质上WebSocket是长期保持链接的,适合提供数据采集服务。

3 所采用的技术方案

3.1 服务器技术

该系统服务器端采用node.js技术。在各种服务器技术中,node.js是一个较新的技术,采用最新的编译技术,适合快速响应易扩展的系统。 Node.js处理用户请求时采用基于事件的非阻塞处理模式,在服务器端实现单线程模式的大规模并发请求的处理,并保持系统结构的简单、轻量和高效。通过比较和测试node.js和其他类型的服务器技术如PHP和JAVA WEB等,在数据流量大、并发多但处理流程简单的情况下适合使用node.js,数据采集系统符合这种特征,因此多终端数据采集系统中选择node.js作为Web服务器使用。

Node.js处理事件的时候采用“非阻塞”方式来循环处理并发请求,不管是网络资源还是存储资源均以事件回调的方式访问,请求处理过程中通过专用接口访问文件系统、数据库、云存储等资源,为大量并发的数据采集的功能实现提供了有效支持。

3.2 实时数据推送技术

在大规模的数据采集系统中,数据采集终端(用户)和服务器之间需要长时间保持链接并以一定的时间间隔发送数据,在实时数据推送技术方面选择WebSocket。

WebSocket解决了Web实时化数据双向推送的效率问题,通过在浏览器中建立长期存在和服务器保持数据交换的连接,实现服务器和客户端之间的一个低耗双向数据交换,和传统推送技术比,通过建立TCP连接来实现数据推送的,比传统技术使用Http连接更加轻量级,可以显著减少保持连接过程中传送的数据量。

Socket.IO是node.js提供的开源WebSocket库,包含服务器端和客户端的库,实现了全双工实时通讯。Socket.IO支持:WebSocket、htmlfile、xhr-polling、jsonp-polling这几种方式来实现B/S模式下的实时通讯,该文选择使用WebSocket来实现系统功能。

4 系统重要功能设计

数据采集系统的用户/设备数据采集功能、数据存储、数据双向传输、数据显示和搜索分别设计如下。

4.1 数据采集功能

数据采集模块可以在浏览器中通过使用表单输入数据,或者从各种设备客户端获取原始数据。用网页表单方式获取数据可以支持各种移动终端,包括PC电脑、手机、pad等,自适应网页也可以很好适应多终端的使用环境,通过表单获取到的数据以WebSocket方式提交到服务器处理;通过各种设备获取的原始数据可以使用专用接口编写专用客户端程序,客户端程序通过设备接口获取从各种设备采集的数据,再在客户端引用 org.java_WebSocket库等实现Java-WebSocket客户端程序,从而将从设备中采集的数据提交到服务器,这种方式降低了服务器获取采集数据的代价,同时尽量减少数据显示的延迟。系统结构如图1所示。

4.2 数据存储功能

数据存储模块根据需要可以存储在客户端、redis缓存、数据库、云存储和文件系统中。

客户端存储将部分采集的数据存在本地可以减少数据链接传输保持的时间和与服务器数据交换的频率,也可以在客户端失去网络连接时作暂存。在网页表单采集数据的模式下,本地存储实现可以通过静态网页、本地文件存储或者是HTML5的LocalStorage来实现。浏览器本地文件存储是使用ActiveXObject支持的Scripting.FileSystemObject对象,浏览器需要进行专门的设置,且不同的浏览器存在兼容性问题;通过HTML5的LocalStorage来实现本地存储有5MB的限制,一般情况下也足够使用了。java-WeSocket专用客户端(手机端或者嵌入式设备)可以通过文件或者本地的数据库如sqlite等方式来本机存储数据。

服务器端存儲实现方式多种多样,可以通过redis缓存、文件系统、数据库、云存储等方式,按数据是否稳定来使用redis缓存和数据库及文件系统存储,在高频数据采集系统中使用redis缓存可以有效地减少服务器负荷,提高响应时间。

数据存储如图2所示。

4.3 基于socket.io实现数据双向传输功能

Socket.io作为node.js技术中封装实时通讯的模块,支持多种类型的终端设备,可以在浏览器和服务器端调用,在浏览器中通过引入脚本库文件,创建socket对象和服务器建立连接,接着使用socket注册message事件并定义回调函数,当服务器通过socket连接发送消息时调用回调函数处理数据并显示到页面中,也可以自定义事件,并注册到服务器上去。

服务器端使用socket.io时,首先创建服务器对象,接着创建socket模块中的监听服务器,定义监听的端口,调用listen方法开始监听,对浏览器客户端发送来的各种事件和消息进行处理,最后使用emit方法发送返回结果给浏览器。Socket.io支持TCP、UDP、HTTP各种协议,可以根据具体需要按消息处理和转发的过程来选择相应的协议,定义事件和回调函数完成服务器和浏览器之间的通讯过程处理。

node.js以非阻塞异步单线程方式处理用户请求,但当有需要大量计算或者耗时较长的任务处理时会显著降低系统的响应时间,对于这类cpu高占用任务需要单独进行优化处理,使用cluster模块进行进程管理。

4.4 数据显示、查询功能

在数据显示模块,根据用户的需求来显示实时数据或者历史数据。显示实时数据时系统中的服务器和显示终端(浏览器)之间通过WebSocket维持长链接,接受数据时显示终端会立即部分刷新内容,大大降低了Web模式下从采集终端到显示终端的显示延迟,同时,在显示终端存储部分临时数据,既可以作为数据备份,也可以减少数据服务器发送的数据。

数据查询功能分为客户端页面内数据查询和服务器端查询两种,具体设计时根据实际情况来调用不同的查询模块,页面内查询不用连接数据库,通过脚本在页面内完成为小范围内查询实时数据提供了便捷,服务器端查询可以查询redis缓存、数据库、文件系统以及云存储中的数据,适合复杂功能大量数据的查询。

5 结束语

在B/S模式下进行实时通讯有多种技术方案可选,适合不同的需求场景。在对各种技术进行分析比较研究后,按照实时数据采集系统的特征和需求,采用node.js和html5支持的WebSocket实现系统功能是切实可行的,对系统的核心功能包括数据采集、數据存储、数据显示查询、数据双向传递等功能进行了设计和实现,即在node.js技术和WebSocket的支持下实现大量用户(终端)的实时信息交互功能。

参考文献:

[1] 杜鹏, 陶洪铸, 高保成, 等. 面向多应用的通用数据采集技术方案[J]. 电力系统自动化, 2015, 39(1): 26-30.

[2] 殷建军, 张铁民, 可欣荣, 等. 面向田园监测的低成本多光谱图像远程采集节点设计[J]. 农业工程学报, 2016, 32(13): 118-124.

[3] 牟雅琳, 丁浩哲, 郭茂林, 等. 基于Node.js的大学生自助学习答疑系统的设计与实现[J]. 电脑知识与技术, 2018, 14(21): 107-109.

[4] 仇晶, 黄岩, 柴瑜晗. 基于Node.js中间层Web开发的研究与实现——以微信图书借阅平台为例[J]. 河北工业科技, 2017, 34(2): 118-124.

[5] 韩立, 刘正捷, 李晖, 等. 基于情境感知的远程用户体验数据采集方法[J]. 计算机学报, 2015, 38(11): 2234-2246.

[6] 熊才权, 李元, 林松, 等. 基于WebSocket的研讨过程控制方法[J]. 湖北工业大学学报, 2018, 33(4): 70-74.

[7] 黄艳庭, 谷玉海, 王菊远. 基于WebSocket的风电机组Web实时监测系统设计[J]. 设备管理与维修, 2018(13): 67-69.

[8] 金枫. Web前端MVC框架的意义与前端发展方向展望[J]. 电脑知识与技术, 2016, 12(3): 75-77.

猜你喜欢

数据采集
Web网络大数据分类系统的设计与改进
基于大型嵌入式系统的污水检测系统设计
基于开源系统的综合业务数据采集系统的开发研究