刘力维
摘 要:文章介绍了一种在安卓平台上实现基于HTTP协议数据网关的方法,并详细阐述了数据网关与终端网络设备之间数据传输的实现过程。
关键词:安卓平台;服务器;应用开发
中图分类号:TP311 文献标志码:A 文章编号:2095-2945(2020)34-0086-02
Abstract: This paper introduces a method of implementing data gateway based on HTTP protocol on Android platform, and elaborates the implementation process of data transmission between data gateway and terminal network equipment.
Keywords: Android platform; server; application development
1 HTTP数据网关功能概述
数据网关广泛应用于各种网络数据采集与传输系统,为终端网络设备提供数据传输的接口,实现对终端网络设备发起的数据传输请求的解析和响应。HTTP协议是一种典型的基于请求、响应机制的应用层协议,通过对协议报文的构造,可以方便地将HTTP协议用于实现数据网关各项功能。
随着移动智能设备的普及,安卓在嵌入式系统中获得了越来越广泛的应用。本文介绍的数据网关就是一个实现了HTTP数据服务器功能的安卓应用系统。系统功能框图如图1所示。数据网关和终端网络设备之间通过HTTP协议进行数据通信,接收终端网络设备的数据传输请求,并负责向终端网络设备发出正确的响应。数据网关作为终端设备的数据服务器,其数据通常来源于本地或网络数据库存储的数据,在网络采集与传输系统中,数据也可能获取自单独的数据采集设备。
2 数据网关与终端设备之间的数据传输过程
数据网关与终端网络设备之间的数据传输过程可以按功能分解为两个主要部分,如图2所示。
首先是数据的封装及解析过程。在网络终端设备上,进行数据发送前,需要将发送数据按照一定格式进行封装,以便数据网关接收数据后能够通过解析过程得到正确的数据。在数据网关向网络终端设备发送响应报文时同样需要数据的封装和解析过程。
第二部分功能是基于HTTP协议的网络报文收发。具体包括终端网络设备向数据网关发送HTTP请求;数据网关对该HTTP请求的接收;数据网关向网络终端设备发送HTTP响应以及终端网络设备接收处理HTTP响应的过程。安卓平台上使用HTTP客户端相关类和方法实现终端网络设备功能相对来说比较简单,本文主要分析数据网关上述数据传输过程的具体实现。
3 数据封装的实现
终端网络设备与数据网关之间传输的数据通常包含多种类型。为了实现对多种类型数据的传输,在HTTP数据包中采用了JSON数据格式对数据进行封装[1]。数据传输过程如下:
终端网络设备构造HTTP POST请求发送给数据网关,将传输数据以JSON对象的形式封装入HTTP请求的消息实体中。通过put方法可以向一个JSON对象添加数据。JSON对象内部包含多个键值对,用来描述具体的请求數据。
在数据网关上,首先从接收到的HTTP请求得到消息实体,然后使用JSON对象的getString等方法对消息实体进行解析,即可得到具体的请求数据。
在数据网关发送给终端网络设备的HTTP响应数据包中,同样可以进行JSON对象的封装,并由终端网络设备进行解析,以实现HTTP响应报文的数据传递。
4 数据网关上HTTP协议数据处理的实现
数据网关通过NanoHTTPD实现了HTTP服务器功能。NanoHTTPD是一个免费、轻量级的HTTP服务器,支持多种HTTP请求,通过几个主要方法和类实现对客户端连接请求的侦听和数据的传输。
实现HTTP网络数据传输的第一步,是建立客户端与服务器间的TCP连接并在适当的时候断开该连接。在建立TCP连接的过程中,终端网络设备作为客户端,其任务比较简单:发起连接请求,等待服务器的响应并完成握手。数据网关作为服务器,负责TCP连接的侦听、建立和维护工作。在NanoHTTPD中,这部分工作主要在start方法中完成。首先,创建ServerSocket类的实例,并绑定本HTTP连接的主机IP地址和所使用的端口号。接着,在start方法中创建线程,并改写线程的run方法,用于等待并接收客户端的连接。在run方法中首先调用ServerSocket的accept方法,程序将阻塞在这里侦听客户端的连接请求。当有客户端请求连接时,程序继续运行,设置HTTP session的Keep Alive时间。一旦客户端与服务器之间的HTTP连接持续处于空闲状态超过该时间,服务器将关闭该HTTP连接。
在start方法创建线程并接收客户端的连接请求后,通过得到的Socket实例创建用于数据收发的输入输出流,并通过AsyncRunner创建一个独立的线程,来处理这个新的客户端连接。新线程首先创建一个本地临时文件,该文件将在后面用于存储客户端上传的数据。然后,创建对应该连接的HttpSession,并将临时文件和输入输出流作为输入参数传递给该session。最后,通过while循环执行 HttpSession的exec方法进行客户端数据处理,只要该客户端连接没有被关闭,该方法将被循环调用。HttpSession的execute方法主要功能是对接收到的客户端数据进行处理,解析出HTTP请求消息的头域信息和消息实体信息。对于本文中的HTTP网络数据传输应用,消息实体中存放的是终端网络设备HTTP请求的具体内容。通过改写exec方法调用的serve方法,实现终端网络设备封装的JSON对象的解析,可以得到终端网络设备发送的具体请求。通过上述过程,实现了终端网络设备到数据网关的一次完整数据请求。
数据网关向终端网络设备发送HTTP响应的过程与前述过程类似,这里不再赘述。
5 HTTP数据网关的应用
本文中的数据网关采用HTTP协议,基于IP地址或域名实现网络数据传输。该方法既可以应用于有线局域网,也可以基于Wi-Fi等无线网络技术[2]实现移动终端设备与数据网关间的数据传输。如果为数据网关分配公网域名和IP地址,则可实现基于广域网的远程数据传输。
参考文献:
[1]龚建华.JSON格式数据在Web开发中的应用[J].办公自动化:综合月刊,2013(20):46-48.
[2]李立芬.基于Wi-Fi技术在电信业务中的应用[J].中国多媒体通信,2012(12):67-68.
[3]宋锐星,朱小勇,胡琳琳,等.HTTP媒体传输方式简述[J].网络新媒体技术,2020,9(03):61-67.