发明内容
针对现有移动设备很容易丢失和目前的云存储服务需要手动备份,且不具有实时性,很难对移动设备的操作系统信息进行完整的恢复的问题,本发明实施例提供了一种可实现智能移动终端与云端虚拟移动终端同步的系统,在云端提供了智能手机操作系统的镜像,将物理手机上的状态信息以及运行时信息实时更新到云端的虚拟手机中,在物理手机出现问题时,能够及时的恢复到相应的状态。为达到上述目的,本发明解决其技术问题所采用的技术方案如下,所述的实现智能移动终端与云端虚拟移动终端同步的系统,包括:
智能移动终端,所述智能移动终端为运行安卓操作系统的智能移动终端;
云端,所述云端包括Web服务器和虚拟移动终端,所述虚拟移动终端运行于云服务器上。
优选的,还包括NTP服务器,用于实现所述智能移动终端、所述Web服务器和所述虚拟移动终端的时钟同步。
具体的,所述智能移动终端包括以下部分:
电量信息收集模块,用于利用安卓系统的广播机制对电量进行监测,并在所述电量发生变化时,将所述电量信息实时更新到云端的所述虚拟移动终端中;
操作系统版本信息收集模块,用于通过调用类CMDExecute执行系统的cat命令,收集存储在所述智能移动终端的/proc/version中的操作系统版本信息;
CPU信息收集模块,用于通过调用类CMDExecute执行系统的cat命令、读取所述智能移动终端/proc/cpuinfo路径下的文件,获取所述智能移动终端的CPU信息;
内存信息收集模块,用于获取所述智能移动终端的内存信息;
进程信息收集模块,用于通过调用类CMDExecute执行系统的top命令,定义一个String[]ddr={“/system/bin/top”,“-n”,“1”},再利用类CMDExecute定义的对象cmd执行cmd.run(ddr,“/system/bin”),并读取该路径下的文件,从而获取所述智能移动终端的正在运行的进程信息。
优选的,所述Web服务器通过使用Tomcat实现服务器功能,并且采取POST方式实现与所述智能移动终端之间的所述操作系统信息的传递。
优选的,所述虚拟移动终端为利用虚拟软件VMware与Android-x86平台相结合在Windows系统上虚拟出的具有安卓操作系统的智能移动终端,包括以下部分:
实时更新模块,用于通过一个线程控制视图的更新,并设置更新频率对所述Web服务器进行轮询,确保数据的实时更新;
操作系统信息接收模块:用于通过URL与所述Web服务器建立连接,监测所述Web服务器是否存在新的数据,当有新的数据时,对所述新的数据进行存储,当没有新的数据时,则以设定的时间间隔对所述Web服务器进行轮询监测数据。
具体的,所述智能移动终端包括流文件信息收集模块,用于从所述智能移动终端的SD卡中读取文件并存入数组中,再根据所述Web服务器提供的IP和一个开放的端口创建与所述Web服务器之间的Socket连接,并通过PrintWriter类将文件以字符流形式传输给所述Web服务器。
具体的,所述Web服务器通过使用面向连接的Socket操作方式,完成信息从所述智能移动终端向所述虚拟移动终端的传递。
具体的,所述Web服务器建立用于监听所述智能移动终端的连接请求的3000端口,和用于监听所述虚拟移动终端的连接请求的4000端口,所述Web服务器首先监听所述4000端口并与所述虚拟移动终端建立连接,再监听所述3000端口并与所述智能移动终端建立连接,当所述智能移动终端与所述虚拟移动终端之间的通道被建立时,所述Web服务器接收所述智能移动终端发送的数据流,并存储在BufferedReader中,再通过readLine()按行转发给所述虚拟移动终端,完成一次Socket连接。
优选的,所述虚拟移动终端包括流文件接收模块。
优选的,所述括流文件接收模块用于与所述Web服务器建立连接,包括:通过Socket()创建本地端口,再接收由所述Web服务器转发的数据并存储在BufferedReader中,解析并处理所述数据后,将所述数据存储在所述虚拟移动终端的SD卡中,存储路径为/sdcard/,同时计算流文件从所述智能移动终端传输至所述虚拟移动终端所需要的时间。
本发明的另一目的在于提供一种智能移动终端与云端虚拟移动终端同步的方法。
为达到上述目的,本发明解决其技术问题所采用的技术方案是,所述的智能移动终端与云端虚拟移动终端同步的方法,包括以下步骤:
(1)所述智能移动终端向所述Web服务器发起HTTP请求;
(2)所述Web服务器解析并处理所述HTTP请求,产生HTTP响应;
(3)所述Web服务器向所述智能移动终端返回所述HTTP响应;
(4)所述Web服务器将解析处理之后的数据,以队列形式存储在Servlet上下文中;
(5)所述虚拟移动终端以一定的频率对所述Web服务器进行轮询;
(6)所述Web服务器从智能移动终端接收的数据传输给所述虚拟移动终端。
具体的,所述步骤(1)中,所述智能移动终端采取POST方式实现与所述Web服务器之间的请求。
具体的,所述步骤(2)中,所述Web服务器首先给所述智能移动终端提供一个可访问的地址,再通过类HttpServletRequest定义一个对象,调用getParameter()函数对所述智能移动终端传送的有序数据进行解析。
具体的,所述步骤(4)中,所述Web服务器还负责解析所述智能移动终端发送数据的时间TimeA,同时记录收到数据时所述Web服务器的时间TimeC1,再计算数据从所述智能移动终端发送至所述Web服务器的时间TimeA_C1。
具体的,所述Web服务器记录其转发数据的时间TimeC2,再计算所述Web服务器接收并转发的数据时间TimeC1_C2,将计算好的时间段以队列的形式存储在Servlet上下文中,存储数据格式为[TimeA&TimeA_C1&TimeC1&TimeC1_C2&par],其中par为传输的数据。
具体的,所述步骤(5)中,所述虚拟移动终端通过URL与所述Web服务器建立连接,监测所述Web服务器是否存在新的数据,如果有新的数据,则对数据进行存储,如果没有数据则按照设定的时间间隔对所述Web服务器进行轮询检测数据。
优选的所述虚拟移动终端接收数据以后,首先对数据进行分解,提取有用信息进行备份。
优选的,所述智能移动终端、所述Web服务器和所述虚拟移动终端均通过调用类NTP中的函数Ntp()来实现与NTP服务器同步的方法,使所述智能移动终端、所述Web服务器和所述虚拟移动终端的时钟同步,其中,所述函数Ntp(),包括三个变量:responseTime,代表所述智能移动终端和/或所述虚拟移动终端收到NTP服务器响应与发送请求至服务器的时间差;localClockOffset,代表本地时钟偏移值;ClockOffset,代表所述智能移动终端和/或所述虚拟移动终端本地时间与NTP服务器时间的差值。
具体的,令系统时钟同步涉及的四个时间点分别为所述智能移动终端和/或所述虚拟移动终端的发送请求的时间t0、所述智能移动终端和/或所述虚拟移动终端接收NTP服务器响应的时间t1、NTP服务器接收来自所述智能移动终端和/或所述虚拟移动终端请求的时间n0以及NTP服务器的响应时间n1,再进行以下计算:
根据公式responseTime=System.currentTimeMillis()-sentTime计算出响应时间response,所述响应时间response是指所述智能移动终端和/或所述虚拟移动终端收到NTP服务器响应时间t1与发送请求的时间t0之差;
根据公式:
localClockOffset=((receiveTimestamp-originateTimestamp)+(transmitTimesta mp-destinationTimestamp))/2;
计算出本地时钟偏移值localClockOffset,其中,Ntp()函数的变量receiveTimestamp和transmitTimestamp分别代表NTP服务端的两个时间点n0和n1,而originateTimestamp和destinationTimestamp分别代表所述智能移动终端和/或所述虚拟移动终端的时间t0和t1;
根据公式ClockOffset=(Math.round(localClockOffset*1000))-responseTime/计算所述智能移动终端和/或所述虚拟移动终端本地时间与NTP服务器的时间偏移值ClockOffset,在程序中利用类NTP定义一个对象NTP ntp=new NTP(),再通过ntp.Ntp()获得偏移值ClockOffset,再将所述智能移动终端或所述Web服务器获取的本地时间补上偏移值ClockOffset,得到所求的标准时间。
优选的,分别提取所述智能移动终端、所述虚拟移动终端和所述Web服务器之间数据传输的时间戳,再对每次提取的时间戳进行校正,其中,令TimeA代表所述智能移动终端收集数据后发送的时间、TimeC1代表所述Web服务器接收所述智能移动终端传输数据的时间、TimeC2代表所述Web服务器转发数据的时间、TimeB代表所述虚拟移动终端接收数据的时间,再利用TimeA_C1表示数据从所述智能移动终端发送至所述Web服务器的时间,利用TimeC1_C2表示所述Web服务器处理数据的时间,利用TimeC2_B表示数据从所述Web服务器转发至所述虚拟移动终端的时间。
本发明的另一目的在于提供另一种智能移动终端与云端虚拟移动终端同步的方法,包括以下步骤:
所述Web服务器建用于监听所述智能移动终端的连接请求的3000端口,和用于监听所述虚拟移动终端的连接请求的4000端口,所述Web服务器首先监听所述4000端口并与所述虚拟移动终端建立连接,再监听所述3000端口并与所述智能移动终端建立连接,当所述智能移动终端与所述虚拟移动终端之间的通道被建立时,所述Web服务器接收所述智能移动终端发送的数据流,并存储在BufferedReader中,再通过readLine()按行转发给所述虚拟移动终端,完成一次Socket连接。
具体的,所述Web服务器通过使用面向连接的Socket操作方式,完成数据流从所述智能移动终端向所述虚拟移动终端的传递。
具体的,所述监听所述3000端口并与所述智能移动终端建立连接,包括以下步骤:所述智能移动终端所包含的流文件信息收集模块,从所述智能移动终端的SD卡中读取文件并存入数组中,再根据所述Web服务器提供的IP和一个开放的端口创建与所述Web服务器之间的Socket连接,并通过PrintWriter类
将文件以字符流形式传输给所述Web服务器。
具体到,所述所述Web服务器首先监听所述4000端口并与所述虚拟移动终端建立连接,包括以下步骤:所述虚拟移动终端所包含的流文件接收模块,通过Socket()创建本地端口,再接收由所述Web服务器转发的数据并存储在BufferedReader中,解析并处理所述数据后,将所述数据存储在所述虚拟移动终端的SD卡中,存储路径为/sdcard/,同时计算流文件从所述智能移动终端传输至所述虚拟移动终端所需要的时间。
具体的,所述智能移动终端、所述Web服务器和所述虚拟移动终端均通过调用类NTP中的函数Ntp()来实现与NTP服务器同步的方法,使所述智能移动终端、所述Web服务器和所述虚拟移动终端的时钟同步,其中,所述函数Ntp(),包括三个变量:responseTime,代表所述智能移动终端、所述Web服务器和所述虚拟移动终端收到NTP服务器响应与发送请求至服务器的时间差;localClockOffset,代表本地时钟偏移值;ClockOffset,代表所述智能移动终端、所述Web服务器和所述虚拟移动终端本地时间与NTP服务器时间的差值。
具体的,令系统时钟同步涉及的四个时间点分别为所述智能移动终端、所述Web服务器和所述虚拟移动终端的发送请求的时间t0、所述智能移动终端、所述Web服务器和所述虚拟移动终端接收NTP服务器响应的时间t1、NTP服务器接收来自所述智能移动终端、所述Web服务器和所述虚拟移动终端请求的时间n0以及NTP服务器的响应时间n1,再进行以下计算:
根据公式responseTime=System.currentTimeMillis()-sentTime计算出响应时间response,所述响应时间response是指所述智能移动终端、所述Web服务器和所述虚拟移动终端收到NTP服务器响应时间t1与发送请求的时间t0之差;
根据公式:
localClockOffset=((receiveTimestamp-originateTimestamp)+(transmitTimestamp-d estinationTimestamp))/2;
计算出本地时钟偏移值localClockOffset,其中,Ntp()函数的变量receiveTimestamp和transmitTimestamp分别代表NTP服务端的两个时间点n0和n1,而originateTimestamp和destinationTimestamp分别代表所述智能移动终端、所述Web服务器和所述虚拟移动终端的时间t0和t1;
根据公式ClockOffset=(Math.round(localClockOffset*1000))-responseTime/计算所述智能移动终端、所述Web服务器和所述虚拟移动终端本地时间与NTP服务器的时间偏移值ClockOffset,在程序中利用类NTP定义一个对象NTP ntp=new NTP(),再通过ntp.Ntp()获得偏移值ClockOffset,再将所述智能移动终端、所述Web服务器和所述虚拟移动终端获取的本地时间补上偏移值ClockOffset,得到所求的标准时间。
具体的,还包括以下步骤:分别提取所述智能移动终端、所述虚拟移动终端和所述Web服务器之间数据传输的时间戳,再对每次提取的时间戳进行校正,其中,令TimeA代表所述智能移动终端收集数据后发送的时间、TimeC1代表所述Web服务器接收所述智能移动终端传输数据的时间、TimeC2代表所述Web服务器转发数据的时间、TimeB代表所述虚拟移动终端接收数据的时间,再利用TimeA_C1表示数据从所述智能移动终端发送至所述Web服务器的时间,利用TimeC1_C2表示所述Web服务器处理数据的时间,利用TimeC2_B表示数据从所述Web服务器转发至所述虚拟移动终端的时间。
本发明的另一目的在于提供一种云端虚拟移动终端测试的方法,包括以下步骤:
分别提取所述智能移动终端的电量信息、操作系统版本信息、CPU信息、内存信息以及正在运行的进程信息,对所述每个类型的信息采用HTTP协议进行一次以上的传输,取平均传输时间,再对不同大小的流文件采用Socket协议进行传输,对每种流文件各执行一次以上的传输,取平均传输时间,所述测试从系统功能的完整性和系统传输时间测试两方面进行。
与现有的安卓开发人员使用的手机模拟器相比,本发明实施例具有如下优点:
1、本发明实现了安卓智能手机的虚拟机,即该虚拟机具有完整的手机操作系统,运行在云服务上,而普通的虚拟机只是虚拟计算机系统,不能很好的服务于手机。
2、本发明实现的手机虚拟机拥有更加丰富充足的软、硬件资源,可以解决开发人员在开发比较耗资源的应用程序时模拟器运行十分缓慢的问题,也可以在物理手机系统崩溃的时候,能够在云端恢复到最初的状态。
3、在云端建立一个与物理手机具有相同操作系统的虚拟手机,在物理手机系统出现问题时,能够及时的恢复到最初的状态,对物理手机进行操作系统级别的实时备份。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中,智能移动终端是指运行安卓操作系统的智能移动终端,包括但不限于各种智能手机。当它作为与虚拟移动终端、虚拟手机等名词对应的称呼时,也叫物理终端、移动设备端、物理手机或物理手机终端。
本发明实施例中,虚拟移动终端作为与智能移动终端、移动设备端等名词对应的称呼时包括但不限于虚拟手机或者手机虚拟机。
本发明实施例的目的之一,是提供一种可实现智能移动终端与云端虚拟移动终端同步的系统,通过在云服务器端设计和部署虚拟移动终端(手机虚拟机),并在智能移动终端(物理手机终端)设计和部署了操作系统信息收集模块,然后利用Web服务器实现物理手机与虚拟手机之间的操作系统状态信息的同步,
主要实现以下两点功能:
(1)物理手机在云端实现操作系统级别备份。本发明在物理手机端设计不同的信息收集模块,可以收集物理手机自身的操作系统版本信息、电量信息、内存信息以及正在运行的进程信息等,并备份至云端的虚拟手机中。
(2)物理手机状态与云端虚拟手机状态的实时同步。本发明利用Web服务器作为物理手机与云端虚拟手机交互的中介,物理手机实时进行自身信息的收集,然后将收集的内容自动发送到Web服务器,Web服务器再将接收的内容转发给云端的虚拟手机,整个过程要求物理手机、Web服务器和云端的虚拟手机在时间上同步。这种物理手机操作系统信息的实时同步增加了系统恢复的准确性。
为达到上述目的,所述的实现智能移动终端与云端虚拟移动终端同步的系统,如图1所示,包括:
智能移动终端,所述智能移动终端为运行安卓操作系统的智能移动终端;
云端,所述云端包括Web服务器和虚拟移动终端,所述虚拟移动终端运行于云服务器上。
云端部署了Web服务器和虚拟手机。其中虚拟手机运行于云服务器上,相对于物理手机,它拥有更加丰富充足的软、硬件资源。物理手机通过各个模块收集操作系统的相关信息,然后通过3G或WiFi无线网络,利用HTTP协议将信息发送至云端的Web服务器,再由Web服务器将信息转发给云端的虚拟手机,实现物理手机与云端虚拟手机的操作系统信息同步。
优选的,还包括NTP服务器,用于实现所述智能移动终端、所述Web服务器和所述虚拟移动终端的时钟同步。
具体的,为了避免智能手机、Web服务器与云端虚拟手机三者时间不同步给实验带来误差,本发明统一使用同步网络时间服务器NTP server的方法,来实现三者的时钟同步。移动设备端和云端均通过调用类NTP中的函数Ntp()来实现与NTP服务器的同步,该函数主要包括三个变量:responseTime,代表客
户端收到NTP服务器响应与发送请求至服务器的时间差;localClockOffset,代表本地时钟偏移值;ClockOffset,代表客户端本地时间与NTP服务器时间的差值。
如图2所示,系统时钟同步涉及的四个时间点分别为客户端的发送请求的时间t0、客户端接收NTP服务器响应的时间t1、NTP服务器接收来自客户端请求的时间n0以及NTP服务器的响应时间n1。首先根据公式(1)可以计算出响应时间response,response是指客户端收到NTP服务器响应时间t1与发送请求的时间t0之差。然后根据公式(2)可以计算出本地时钟偏移值localClockOffset,其中,Ntp()函数的变量receiveTimestamp和transmitTimestamp分别代表NTP服务端的两个时间点n0和n1,而originateTimestamp和destinationTimestamp分别代表客户端的时间t0和t1。最后根据公式(3)计算客户端本地时间与NTP服务器的时间偏移值ClockOffset,在程序中利用类NTP定义一个对象NTP ntp=new NTP(),然后通过ntp.Ntp()即可获得偏移值ClockOffset,再将移动设备或Web服务器获取的本地时间补上偏移值ClockOffset则是所求的标准时间。
responseTime=System.currentTimeMillis()-sentTime(1)localClockOffset=((receiveTimestamp-originateTimestamp)+(transmitTimestamp-destinationTimestamp))/2(2)
ClockOffset=(Math.round(localClockOffset*1000))-responseTime/2(3)
根据上述时钟同步方案,本发明将分别提取智能手机、Web服务器以及云端虚拟手机之间数据传输的时间戳,然后对每次提取的时间戳进行校正。如图3所示,其中TimeA代表移动设备端收集数据后发送的时间,TimeC1代表Web服务器接收移动设备传输数据的时间,TimeC2代表Web服务器转发数据的时间,TimeB代表虚拟手机接收数据的时间,然后利用TimeA_C1表示数据从物理手机发送至Web服务器的时间,利用TimeC1_C2表示Web服务器处理数据的时间,利用TimeC2_B表示数据从Web服务器转发至云端虚拟手机的时间。
HTTP是目前网络上应用最广泛的通信协议之一。HTTP通信协议允许用户提出HTTP请求,然后由Web服务器解析并处理请求,将请求结果返回给用户。本发明利用HTTP协议实现操作系统信息的传输,传输过程如图4所示,物理手机利用HTTP协议POST方式将数据传输给Web服务器,Web服务器将解析处理之后的数据存储在Servlet上下文中,并向物理手机返回一个响应。此时虚拟手机以一定的频率对Web服务器进行轮询,将Web服务器从物理手机接收的最新数据传输给云端虚拟手机。
本发明实施例在移动设备端设计了多个模块,包括电量信息、内存信息、操作系统版本信息以及正在运行的进程信息等收集模块,当每个模块的状态发生变化的时候,移动设备自动将变化的信息通过HTTP协议发送到Web服务器端,并实时更新到云端的虚拟手机中,对移动设备进行操作系统级别的备份。
具体的,智能移动终端包括以下部分:
电量信息收集模块,用于利用安卓系统的广播机制对电量进行监测,并在所述电量发生变化时,将所述电量信息实时更新到云端的所述虚拟移动终端中;
操作系统版本信息收集模块,用于收集存储在所述智能移动终端中的操作系统版本信息;
CPU信息收集模块,用于获取所述智能移动终端的CPU信息;
内存信息收集模块,用于获取所述智能移动终端的内存信息;
进程信息收集模块,获取所述智能移动终端的正在运行的进程信息。
具体的,电量信息收集模块的设计如下:
广播机制在安卓系统中得到广泛使用,比如用户收到一条短信或者一个电话时,系统都会发出一条广播。应用程序开发人员则可以根据系统的广播机制,开发新的应用,在接收广播的时候响应事件。例如隐私短信设置应用,我们会将隐私的号码放入隐私库中,当收到短信广播时,会将这个号码与隐私库中的号码作比较,如果是隐私短信则单独放入有密码的收件箱里。本发明正是利用安卓系统的广播机制对电量进行监测,并在电量发生变化时,将电量信息实时更新到云端的手机中。
在该模块设计代码中创建了一个BroadcastReceiver对象mBatteryInfo
Receiver,并实现其onReceive方法,接收系统的广播可以获得手机的当前电量信息。一次完整的广播不仅仅是创建BroadcastReceiver就可以完成的,还需要对本条广播进行注册和注销。主要有两种方式:静态注册和动态注册。静态注册是在AndroidManifest.xml文件中配置。动态注册也比较方便,采用编程的方法来完成。本发明采用动态的方法,在OnResume()中注册,并在OnPause()中注销。
当该模块检测到系统电量发生变化,比如电量从99%变化到98%,计算当前的电量信息level1=98,同时会记录此刻的时间,其中时间的提取采用Date类,并利用SimpleDateFormat类来规范时间格式。再将时间和电量信息一起作为参数,传送给服务器端。
其中,电量信息收集运行效果如图5所示,表示移动设备当前的电量信息为55%,同时显示当前的时间戳为2012-12-0315:07:29.281。
具体到,操作系统版本信息收集模块的设计如下:
移动设备操作系统版本信息收集可以通过类CMDExecute来实现,这个信息存储在移动设备的/proc/version中,可以通过cat命令获取操作系统的信息。其中,操作系统版本信息收集运行效果如图6所示,表示移动设备的操作系统版本为Linux version2.6.35.7,同时显示当前的时间戳为2012-12-1617:13:58.748。
具体的,CPU信息收集模块的设计如下:
CPU信息的收集可以在移动设备的系统信息/proc/cpuinfo中获取,与操作系统信息的获取方案类似,调用类CMDExecute来执行系统的cat命令,读取该路径下的文件就可以获取移动设备的CPU信息。其中CPU信息收集运行效果如图7所示,显示移动设备当前的CPU信息,同时显示当前的时间戳为2012-12-1617:17:01.701。
具体的,内存信息收集模块的设计如下:
内存信息的获取主要有两种方法,一种方法可以通过类CMDExecute来实现,这个信息存储在移动设备的/proc/meminfo中,与CPU信息获取方案类似,可以通过cat命令获取移动设备的内存信息,但是获取的信息是移动设备Memory的总量。另一种方法是利用
getSystemService(Context.ACTIVITY_SERVICE)获取
ActivityManager.MemoryInfo对象,从而获取系统的内存信息,本发明中采用第二种方法,其运行效果如图8所示,显示移动设备当前的内存信息。
具体的,进程信息收集模块的设计如下:
进程信息收集可以通过调用类CMDExecute来执行系统的top命令,定义一个String[]ddr={“/system/bin/top”,“-n”,“1”},然后利用类CMDExecute定义的对象cmd执行cmd.run(ddr,“/system/bin”)读取该路径下的文件就可以获取移动设备的正在运行的进程信息。其中进程信息收集运行效果如图9所示,显示移动设备当前正在运行的进程信息,同时显示当前的时间戳为2012-12-1617:31:18.418。
具体的,所述Web服务器通过使用Tomcat实现服务器功能,并且采取POST方式实现与所述智能移动终端之间的所述操作系统信息的传递。
具体的,云端Web服务器设计如下:
本发明实施例将虚拟手机和Web服务器部署在云端。Web服务器称为HTTP服务器,其主要功能是提供网上浏览服务。一般采用两种通信方式:GET和POST。这两种方式都是向服务器发送所请求资源的URL,获取指定的资源,但是在使用的时候也存在差别。首先,GET请求方式,对传输的参数格式和长度是有要求的,要特别注意一些特殊转义字符,例如“%”、“空格”、“?”以及“=”等特殊字符都需要进行转义才能使用GET方式,且参数的长度不宜过长。另外,GET请求方式的传递参数会出现在浏览器的地址栏上,对于一些对安全性要求较高的参数,应该采用POST方式。因此,出于以上两点考虑,本发明采取POST方式实现客户端与Web服务器间的操作系统状态参数传递。
Tomcat以其轻量级的资源占用率、开源免费、性能稳定,而且扩展性好等优势,已经成为目前比较流行的Web应用服务器。在云端,本发明选择使用Tomcat来实现Web服务器的功能。云端的服务器主要负责以下几方面的工作:
(1)Web服务器首先给移动设备端提供一个可访问的地址,然后通过类HttpServletRequest定义一个对象,调用getParameter()函数对移动设备传送的有序数据进行解析,除接收数据之外,Web服务器还负责解析移动设备端发送数据的时间TimeA,同时记录收到数据时服务器的时间TimeC1。然后计算第一段时间:数据从移动设备端发送至Web服务器的时间TimeA_C1。
(2)记录Web服务器转发数据的时间TimeC2,然后计算第二段时间:Web服务器接收并转发的数据时间TimeC1_C2。将计算好的时间段以队列的形式存储在ServletContext上下文中,存储数据格式为[TimeA&TimeA_C1&TimeC1&TimeC1_C2&par],其中par为传输的数据。队列的特点是先进先出,可以保证云端虚拟手机访问时,数据可以进行有序的传输。
具体的,所述虚拟移动终端为利用虚拟软件VMware与Android-x86平台相结合在Windows系统上虚拟出的具有安卓操作系统的智能移动终端,包括以下部分:
实时更新模块,用于通过一个线程控制视图的更新,并设置更新频率对所述Web服务器进行轮询,确保数据的实时更新;
操作系统信息接收模块:用于通过URL与所述Web服务器建立连接,监测所述Web服务器是否存在新的数据,当有新的数据时,对所述新的数据进行存储,当没有新的数据时,则以设定的时间间隔对所述Web服务器进行轮询监测数据。
具体的,云端虚拟手机设计如下:
虚拟机的概念被提出以来,一直受到广泛的应用。目前虚拟机可以分为两种,第一种是对计算机系统的虚拟,它和真实的操作系统具有基本相同的功能,
可以在这个虚拟的环境中运行软件,此类虚拟机是通过软件模拟来实现。另一种是对某个应用运行环境进行虚拟,使每个应用程序运行在各自的虚拟环境中,互不影响。本发明提到的虚拟手机是利用虚拟软件VMware与Android-x86平台相结合在Windows系统上虚拟出的具有安卓操作系统的智能手机,如图10所示,这种手机虚拟机比目前安卓开发人员用的手机模拟器速度要快很多。Android-x86的出现拓展了安卓智能手机操作系统的应用平台,可以将安卓系统安装在PC机上,对于智能手机操作系统,这是一次很有意义的突破。
云端的虚拟手机是本发明设计系统中的重要组成部分,它具有完整的硬件和软件功能,可以对移动设备端的安卓操作系统进行实时备份,相当于在云端形成一个真实手机的镜像。本发明中云端虚拟手机主要设计了以下几个模块:
(1)实时更新模块。本发明通过一个线程来控制视图的更新,可以设置更新的频率,不断的对Web服务器进行轮询,确保数据更新的实时性。另外需要说明一点,安卓中视图的更新不能直接在线程中进行,所以本发明使用Handler来实现更新,将获取数据的代码refresh()写到线程中。
(2)操作系统信息接收模块。数据接收模块的流程图如图11所示,首先虚拟手机通过URL与Web服务器建立连接,监测服务器是否存在新的数据,如果有新的数据,则对数据进行存储,如果没有数据则以一定的时间间隔对Web服务器进行轮询检测数据。此外,接收数据以后,由于虚拟手机从Web服务器获取的数据是一系列用逗号分隔的字符串,我们首先需要对数据进行分解,提取有用信息进行备份。传输的数据格式为[TimeA=yyyy-MM-dd HH:mm:ss.SSS,TimeA_C1=SSS,TimeC1=yyyy-MM-dd HH:mm:ss.SSS,TimeC1_C2=SSS,TimeC2=SSS,par],因此,使用命令String[]dd=inputLine.split(“,”),可以将表中的六个参量分别的放入数组中,例如dd[0]=TimeA,dd[1]=TimeA_C1和dd[2]=TimeC1等。云端虚拟手机在获取数据的同时,需要记录获取数据的时间TimeB,然后统计数据从移动设备端传送至
云端虚拟手机过程的三段时间,以及传输的整体时间
Time_all=TimeA_C1+TimeC1_C2+TimeC2_B,其中,
TimeC2_B=TimeB-bar.parse(dd[4]).getTime()。
相对应的,本发明另一实施例提供了一种智能移动终端与云端虚拟移动终端同步的方法,包括以下步骤:
(1)所述智能移动终端向所述Web服务器发起HTTP请求;
(2)所述Web服务器解析并处理所述HTTP请求,产生HTTP响应;
(3)所述Web服务器向所述智能移动终端返回所述HTTP响应;
(4)所述Web服务器将解析处理之后的数据,以队列形式存储在Servlet上下文中;
(5)所述虚拟移动终端以一定的频率对所述Web服务器进行轮询;
(6)所述Web服务器从智能移动终端接收的数据传输给所述虚拟移动终端。
具体的,所述步骤(1)中,所述智能移动终端采取POST方式实现与所述Web服务器之间的请求。
具体的,所述步骤(2)中,所述Web服务器首先给所述智能移动终端提供一个可访问的地址,再通过类HttpServletRequest定义一个对象,调用getParameter()函数对所述智能移动终端传送的有序数据进行解析。
具体的,所述步骤(4)中,所述Web服务器还负责解析所述智能移动终端发送数据的时间TimeA,同时记录收到数据时所述Web服务器的时间TimeC1,再计算数据从所述智能移动终端发送至所述Web服务器的时间TimeA_C1。
具体的,所述Web服务器记录其转发数据的时间TimeC2,再计算所述Web服务器接收并转发的数据时间TimeC1_C2,将计算好的时间段以队列的形式存储在ServletContext上下文中,存储数据格式为[TimeA&TimeA_C1&TimeC1&TimeC1_C2&par],其中par为传输的数据。
具体的,所述步骤(5)中,所述虚拟移动终端通过URL与所述Web服务器建立连接,监测所述Web服务器是否存在新的数据,如果有新的数据,则对数据进行存储,如果没有数据则按照设定的时间间隔对所述Web服务器进行轮询检测数据。
优选的所述虚拟移动终端接收数据以后,首先对数据进行分解,提取有用信息进行备份。
优选的,所述智能移动终端、所述Web服务器和所述虚拟移动终端均通过调用类NTP中的函数Ntp()来实现与NTP服务器同步的方法,使所述智能移动终端、所述Web服务器和所述虚拟移动终端的时钟同步,其中,所述函数Ntp(),包括三个变量:responseTime,代表所述智能移动终端和/或所述虚拟移动终端收到NTP服务器响应与发送请求至服务器的时间差;localClockOffset,代表本地时钟偏移值;ClockOffset,代表所述智能移动终端和/或所述虚拟移动终端本地时间与NTP服务器时间的差值。
具体的,令系统时钟同步涉及的四个时间点分别为所述智能移动终端、所述Web服务器和所述虚拟移动终端的发送请求的时间t0、所述智能移动终端和/或所述虚拟移动终端接收NTP服务器响应的时间t1、NTP服务器接收来自所述智能移动终端、所述Web服务器和所述虚拟移动终端请求的时间n0以及NTP服务器的响应时间n1,再进行以下计算:
根据公式responseTime=System.currentTimeMillis()-sentTime计算出响应时间response,所述响应时间response是指所述智能移动终端、所述Web服务器和所述虚拟移动终端收到NTP服务器响应时间t1与发送请求的时间t0之差;
根据公式
localClockOffset=((receiveTimestamp-originateTimestamp)+(transmitTimestamp-d estinationTimestamp))/2计算出本地时钟偏移值localClockOffset,其中,Ntp()函数的变量receiveTimestamp和transmitTimestamp分别代表NTP服务端的两个时间点n0和n1,而originateTimestamp和destinationTimestamp分别代表所述
智能移动终端、所述Web服务器和所述虚拟移动终端的时间t0和t1;
根据公式ClockOffset=(Math.round(localClockOffset*1000))-responseTime/计算所述智能移动终端和/或所述虚拟移动终端本地时间与NTP服务器的时间偏移值ClockOffset,在程序中利用类NTP定义一个对象NTP ntp=new NTP(),再通过ntp.Ntp()获得偏移值ClockOffset,再将所述智能移动终端、所述Web服务器和所述虚拟移动终端获取的本地时间补上偏移值ClockOffset,得到所求的标准时间。
优选的,分别提取所述智能移动终端、所述虚拟移动终端和所述Web服务器之间数据传输的时间戳,再对每次提取的时间戳进行校正,其中,令TimeA代表所述智能移动终端收集数据后发送的时间、TimeC1代表所述Web服务器接收所述智能移动终端传输数据的时间、TimeC2代表所述Web服务器转发数据的时间、TimeB代表所述虚拟移动终端接收数据的时间,再利用TimeA_C1表示数据从所述智能移动终端发送至所述Web服务器的时间,利用TimeC1_C2表示所述Web服务器处理数据的时间,利用TimeC2_B表示数据从所述Web服务器转发至所述虚拟移动终端的时间。
本发明另一实施例提供了另一种智能移动终端与云端虚拟移动终端同步的方法,利用Socket协议实现了流文件在物理手机和云端虚拟手机之间的同步,加强了物理手机与虚拟手机之间的交互。
该方法的是实施例包括如下步骤:
所述Web服务器建用于监听所述智能移动终端的连接请求的3000端口,和用于监听所述虚拟移动终端的连接请求的4000端口,所述Web服务器首先监听所述4000端口并与所述虚拟移动终端建立连接,再监听所述3000端口并与所述智能移动终端建立连接,当所述智能移动终端与所述虚拟移动终端之间的通道被建立时,所述Web服务器接收所述智能移动终端发送的数据流,并存储在BufferedReader中,再通过readLine()按行转发给所述虚拟移动终端,完成一次Socket连接。
具体的,基于Socket协议的同步机制如下:
Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket有两种主要的操作方式,面向连接的和无连接的。面向连接的Socket操作就像一部电话,必须建立一个连接和一个呼叫所有的事情到达时的顺序与它们出发时的顺序是一样的。无连接的Socket操作就像是一个邮件投递,没有什么保证。本发明是实施例使用面向连接的操作方式完成文件从物理手机到虚拟手机的传递。如图12所示,服务器端创建并监听3000和4000两个端口,接收来自物理手机和虚拟手机的连接请求,一旦连接被建立,物理手机将通过3000端口向服务器发送文件,服务器接收流文件之后通过4000端口将流文件发送给虚拟手机,完成一次连接。
具体的,所述监听所述3000端口并与所述智能移动终端建立连接,包括以下步骤:所述智能移动终端所包含的流文件信息收集模块,从所述智能移动终端的SD卡中读取文件并存入数组中,再根据所述Web服务器提供的IP和一个开放的端口创建与所述Web服务器之间的Socket连接,并通过PrintWriter类将文件以字符流形式传输给所述Web服务器。
具体的,移动设备端设计如下:
本发明实施例使用Socket通信方式实现流文件传输实验,制作10个不同大小的txt文本,文本的大小是200K、400K、600K至2000K,分别在物理手机和云端虚拟手机之间进行传输测试。移动设备端的流文件信息收集模块负责从智能手机的SD卡中读取文件并存入数组中,然后根据Web服务器提供的IP和一个开放的端口创建与服务器之间的Socket连接,通过PrintWriter类将文件以字符流形式传输给服务器。流文件信息收集过程如图13所示:
具体的,所述Web服务器通过使用面向连接的Socket操作方式,完成数据流从所述智能移动终端向所述虚拟移动终端的传递。
具体的,云端Web服务器设计如下:
本发明使用Socket方式实现流文件的传输,服务器创建3000和4000两个端口,其中3000端口负责监听物理手机端的连接请求,4000端口负责监听云端虚拟手机的连接请求。服务器首先监听4000端口,与虚拟手机端建立连接,然后监听3000端口,与物理手机建立连接。一旦物理手机与虚拟手机之间的通道被建立,服务器端将接收物理手机发送的数据流,并存储在BufferedReader中,然后通过readLine()按行转发给虚拟手机,完成一次Socket连接。
具体到,所述所述Web服务器首先监听所述4000端口并与所述虚拟移动终端建立连接,包括以下步骤:所述虚拟移动终端所包含的流文件接收模块,通过Socket()创建本地端口,再接收由所述Web服务器转发的数据并存储在BufferedReader中,解析并处理所述数据后,将所述数据存储在所述虚拟移动终端的SD卡中,存储路径为/sdcard/,同时计算流文件从所述智能移动终端传输至所述虚拟移动终端所需要的时间。
具体的,云端虚拟手机设计如下:
云端虚拟手机设计了一个流文件接收模块,该模块主要负责与服务器建立连接,通过Socket()创建本地端口,然后接收由服务器转发的数据并存储在BufferedReader中,解析数据并处理数据,最后将数据存储在虚拟手机的SD卡中,存储路径为/sdcard/,同时虚拟手机负责计算流文件从移动设备端传输至云端虚拟手机所需要的时间。
相应的,本发明实施例提供了另一种实现智能移动终端与云端虚拟移动终端同步的系统,包括:
智能移动终端,所述智能移动终端为运行安卓操作系统的智能移动终端;
云端,所述云端包括Web服务器和虚拟移动终端,所述虚拟移动终端运行于云服务器上。
优选的,还包括NTP服务器,用于实现所述智能移动终端、所述Web服务器和所述虚拟移动终端的时钟同步。
具体的,所述智能移动终端包括流文件信息收集模块,用于从所述智能移动终端的SD卡中读取文件并存入数组中,再根据所述Web服务器提供的IP和一个开放的端口创建与所述Web服务器之间的Socket连接,并通过PrintWriter类将文件以字符流形式传输给所述Web服务器。
具体的,所述Web服务器通过使用面向连接的Socket操作方式,完成信息从所述智能移动终端向所述虚拟移动终端的传递。
具体的,所述Web服务器建立用于监听所述智能移动终端的连接请求的3000端口,和用于监听所述虚拟移动终端的连接请求的4000端口,所述Web服务器首先监听所述4000端口并与所述虚拟移动终端建立连接,再监听所述3000端口并与所述智能移动终端建立连接,当所述智能移动终端与所述虚拟移动终端之间的通道被建立时,所述Web服务器接收所述智能移动终端发送的数据流,并存储在BufferedReader中,再通过readLine()按行转发给所述虚拟移动终端,完成一次Socket连接。
优选的,所述虚拟移动终端包括流文件接收模块。
优选的,所述括流文件接收模块用于与所述Web服务器建立连接,包括:通过Socket()创建本地端口,再接收由所述Web服务器转发的数据并存储在BufferedReader中,解析并处理所述数据后,将所述数据存储在所述虚拟移动终端的SD卡中,存储路径为/sdcard/,同时计算流文件从所述智能移动终端传输至所述虚拟移动终端所需要的时间。
本发明的另一实施例在于提供一种云端虚拟移动终端测试的方法,包括以下步骤:
分别提取所述智能移动终端机的电量信息、操作系统版本信息、CPU信息、内存信息以及正在运行的进程信息,对所述每个类型的信息采用HTTP协议进行一次以上的传输,取平均传输时间,再对不同大小的流文件采用Socket协议进行传输,对每种流文件各执行一次以上的传输,取平均传输时间,所述测试从系统功能的完整性和系统传输时间测试两方面进行。
具体的,测试方法如下:
分别提取智能手机的电量信息、操作系统版本信息、CPU信息、内存信息以及正在运行的进程信息。然后对每个类型的信息采用HTTP协议进行多次传输,测试过程中,对每一种类型信息的传输各执行5次,取平均传输时间。然后对不同大小的流文件采用Socket协议进行传输,测试过程中,对每种流文件各执行5次,取平均传输时间。
测试结果与分析如下:
本发明实施例从系统功能的完整性和系统传输时间测试两方面进行实验,并对实验结果进行详细分析,对基于虚拟手机的计算存储资源管理系统进行评估。
(1)功能完整性测试
功能完整性是指移动设备的操作系统信息变化是否可以自动的传输到云端的虚拟手机中。在本次测试中,本发明以电量信息模块为例,当智能手机的电量从100%逐渐变化至90%,云端的虚拟手机中电量也会依次随之发生改变,从100%变化至90%。智能手机的自身电量信息收集如图14所示,其中par为智能手机的电量信息。云端虚拟手机的电量信息备份如图15所示,电量信息也随之改变,从100%变化至90%。
在电量信息传送的过程中,本发明对电量信息传输时间进行统计,如表1所示,其中TimeA_C1表示数据从物理手机发送至Web服务器的时间,TimeC1_C2表示Web服务器处理数据的时间,TimeC2_B表示数据从Web服务器转发至云端虚拟手机的时间,Time_all表示传输的总体时间。根据对电量信息传输测试结果的分析,物理手机的电量信息变化可以实时更新到云端的虚拟手机中,证实了本发明所设计系统的功能完整性。
表1电量信息传输时间
(2)系统传输时间测试
本发明将系统传输时间精确至毫秒,统一格式为yyyy-MM-dd HH:mm:ss.SSS。在本实验中,利用Web服务器来计算前两段时间:分别是TimeA_C1=TimeC1-TimeA与TimeC1_C2=TimeC2-TimeC1,然后再将两个时间段发送至云端虚拟手机,由虚拟手机完成第三段时间和总传输时间的计算:TimeC2_B=TimeB-TimeC2与Time_all=TimeB-TimeA。以下分别对智能手机的操作系统版本信息、CPU信息、内存信息、正在运行的进程信息以及流文件信息进行传输测试,并对物理手机不同类型信息使用HTTP方式进行传输,时间延迟的统计如表2所示,同时对不同大小的流文件使用Socket方式进行传输,时间延迟的统计如表3所示。
物理手机首先对自身信息进行收集,其中对操作系统版本信息的收集如图16所示,然后通过Web服务器的转发;云端虚拟手机信息备份如图17所示,CPU信息收集及备份如图18和图19所示;内存信息收集及备份如图20和图21所示;正在运行的进程信息收集及备份如图22和图23所示;流文件收集及备份如图24和图25所示。
表2不同类型信息平均传输时间
表3不同大小流文件传输时间
根据以上实验,本发明分别对传输不同类型的信息,以及传输不同大小流文件传输时间数据进行分析。其中操作系统信息传输时间如图26所示,本发明采用HTTP协议对操作系统信息进行传输,每种类型的信息各传输5次,取平均传输时间。该图横坐标代表物理手机的操作系统的状态信息,纵坐标代表信息备份至云端的时间。由图26可见,TimeA_C1,即信息从物理手机传递至Web服务器的时间,TimeC1_C2,即服务器处理信息的时间,TimeC2_B,即服务器将信息转发至虚拟手机的时间,Time_all,即信息由物理手机传递至虚拟手机的总体时间。由于物理手机通过无线网络访问云端服务器,因此在三段时间中,TimeC1_C2和TimeC2_B的值远远小于TimeA_C1。从整体上来看,传输总体时间维持在35000毫秒以下。在我们的进一步工作中,我们拟通过采用其他新的网络协议,来缩短时间上的延迟。目前采用Web服务器的主要原因是,1)目前需要传递的操作系统等信息都比较短;2)Web应用和服务器开发相对容易,部署简单。
流文件传输时间变化趋势如图27所示。本发明采用Socket通信方式传输流文件,将不同大小的流文件各传输5次,取平均传输时间。该图横坐标代表流文件的大小,分别从200K逐渐增加至2000K,纵坐标代表流文件从物理手机SD卡传输至云端虚拟手机SD卡的时间。由图27可见,其中TimeA_C1,即流文件从物理手机SD卡传输至Web服务器的时间,TimeC1_C2,即Web服务器处理流文件的时间,TimeC2_B,即Web服务器将流文件转发至虚拟手机的时间,Time_all,即流文件从物理手机SD卡中传输至虚拟手机SD卡的总体时间。由于物理手机通过无线网络访问云端,故TimeA_C1的传输时间大于TimeC2_B。此外,由于Web服务器端的转发机制是使用readline()进行按行转
发,而本发明用于测试的流文件是文本形式的文件,因此随着处理数据量的增大,Web服务器的转发时间TimeC1_C2呈明显上升趋势,而且整体上时间的消耗随着文件大小是线性增长。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明公开的量纲和值旨在被用于严格地限于所述的精确值。相反,除非另外指明,每个这样的量纲和值旨在表述所述值以及围绕该值功能上等同的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。