一种通信方法、装置、电子设备和程序产品
技术领域
本发明涉及虚拟化技术领域,特别涉及一种通信方法、装置、电子设备和程序产品。
背景技术
虚拟化允许多个虚拟机同时运行在手机、手持设备或计算机上,通过虚拟化技术,用户无需两台或多台移动设备,可在一个物理设备上访问多个虚拟机、多个操作***。虚拟化技术在安全性方面具有显著的特性,通过虚拟化技术带来的隔离性可实现单一终端上多个操作***的隔离,避免各操作***上的进程对其他操作***产生不利影响。
当前多虚拟机多操作***的终端正在快速发展,但是现有技术中不存在多虚拟机***架构下各虚拟机通过通信组件实现通信的合理方案。因为终端需要通过通信组件实现语音或数据通信,而对应一个通信组件通常只能运行一个通信接口层通信程序以实现通信功能,所以在多个虚拟机均需要使用同一个通信组件进行通信时不能在每个虚拟机上都运行与该通信组件对应的通信接口层通信程序。若多虚拟机终端只有一个通信组件,则仅能在其中一个虚拟机上运行相应的通信接口层通信程序实现通信,其他虚拟机若需要通信则需要重新在需要通信的虚拟机上再建立通信接口层通信程序,接入不灵活,并且操作步骤复杂;若多虚拟机终端有多个通信组件,则通常确定通信组件对应的虚拟机后,其他虚拟机将无法再灵活的通过这些通信组件实现通信功能。
现有技术的不足主要在于:不存在多虚拟机终端中多虚拟机共用一个或多个通信组件实现通信的合理方案,各虚拟机不能同时与通信组件建立连接,不能在需要进行通信时及时通过通信组件实现通信功能。
发明内容
本申请实施例提出了解决上述问题的技术方案,在第二虚拟机与通信组件建立连接的基础上,也能够使第一虚拟机通过第二虚拟机与所述通信组件建立连接,在第一虚拟机需要时可直接基于上述连接关系实现通信。
在一个方面,本申请实施例提供了一种通信方法,其特征在于,所述方法包括:
获取第一虚拟机应用的通信请求,在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件;和/或,接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据,将解析后的通信数据发送至第一虚拟机应用。
优选的,所述在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件,包括:在所述第二虚拟机中运行通信接口层通信程序打包所述通信请求,将打包后的通信请求发送至与所述通信接口层通信程序具有第一对应关系的所述通信组件;和/或,所述在第二虚拟机解析所述通信数据,包括:在所述第二虚拟机中运行通信接口层通信程序解析所述通信数据,其中所述通信组件与所述通信接口层通信程序具有第一对应关系。
优选的,所述在第二虚拟机打包所述通信请求之前,还包括:确定所述第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述第一虚拟机应用对应的所述通信接口层通信程序;和/或,在所述将解析后的通信数据发送至第一虚拟机应用之前,还包括:确定所述第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述通信接口层通信程序对应的所述第一虚拟机应用。
优选的,所述确定所述第一虚拟机应用与所述通信组件的第二对应关系,包括:根据预设的所述第一虚拟机与所述通信组件的第三对应关系确定所述第一虚拟机应用与所述通信组件的第二对应关系;或者,获取对应关系选择信息,根据所述对应关系选择信息确定所述第一虚拟机应用与所述通信组件的第二对应关系。
优选的,所述第一虚拟机应用运行在安卓(Android)操作环境中,所述通信接口层通信程序为无线接口层守护进程(RILD)。
在另一个方面,本申请实施例提供了一种通信装置,其特征在于,所述装置包括:
代理模块,用于获取第一虚拟机应用的通信请求;
通信模块,用于在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件;和/或,
通信模块,用于接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据;
代理模块,用于将解析后的通信数据发送至第一虚拟机应用。
优选的,所述通信模块,具体用于在所述第二虚拟机中运行通信接口层通信程序打包所述通信请求,将打包后的通信请求发送至与所述通信接口层通信程序具有第一对应关系的所述通信组件;和/或,
所述通信模块,具体用于在所述第二虚拟机中运行通信接口层通信程序解析所述通信数据,其中所述通信组件与所述通信接口层通信程序具有第一对应关系。
优选的,所述装置还包括:
第一确定模块,用于确定所述第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述第一虚拟机应用对应的所述通信接口层通信程序;和/或,
第二确定模块,用于确定所述第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述通信接口层通信程序对应的所述第一虚拟机应用。
优选的,所述确定所述第一虚拟机应用与所述通信组件的第二对应关系,包括:根据预设的所述第一虚拟机与所述通信组件的第三对应关系确定所述第一虚拟机应用与所述通信组件的第二对应关系;或者
获取对应关系选择信息,根据所述对应关系选择信息确定所述第一虚拟机应用与所述通信组件的第二对应关系。
优选的,所述第一虚拟机应用运行在安卓(Android)操作环境中,所述通信接口层通信程序为无线接口层守护进程(RILD)。
在另一个方面,本申请实施例提供了一种电子设备,其特征在于,所述电子设备包括通信组件;以及上述通信装置。
在另一个方面,本申请实施例提供了一种计算机程序产品,所述计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,所述计算机程序机制包括用于执行以下步骤的指令:
获取第一虚拟机应用的通信请求,在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件;和/或,
接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据,将解析后的通信数据发送至第一虚拟机应用。
本申请的有益效果如下:
本申请中获取第一虚拟机应用的通信请求,在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件;或者,接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据,将解析后的通信数据发送至第一虚拟机应用。本申请在第二虚拟机与通信组件建立连接的基础上,也能够使第一虚拟机通过第二虚拟与所述通信组件建立连接,在第一虚拟机需要时可直接基于上述连接关系实现通信。
附图说明
下面将参照附图描述本发明的具体实施例,其中:
图1A和图1B示出了本申请实施例一中通信方法的流程示意图;
图2A-2D示出了本申请某些实施例中虚拟化***架构示意图;
图3A和图3B示出了本申请实施例二中通信方法的流程示意图;
图4示出了本申请实施例三中虚拟化***架构示意图;
图5示出了本申请实施例四通信装置的结构示意图。
具体实施方式
为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。
发明人在发明过程中注意到:现有技术中终端上已经可以运行多个虚拟机,但是不存在多虚拟机终端中多虚拟机共用一个或多个通信组件实现通信的合理方案,各虚拟机不能同时与通信组件建立连接,不能在需要进行通信时及时通过通信组件实现通信功能。
针对上述不足,本申请提出了获取第一虚拟机应用的通信请求,在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件;和/或,接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据,将解析后的通信数据发送至第一虚拟机应用。本申请在第二虚拟机与通信组件建立连接的基础上,也能够使第一虚拟机通过第二虚拟与所述通信组件建立连接,在第一虚拟机需要时可直接基于上述连接关系实现通信,下面进行说明。
本申请中的第一虚拟机和第二虚拟机为运行于同一虚拟化层之上的虚拟机,并且该虚拟化层之上还可运行其他一个或多个数量不限的虚拟机。所述第一虚拟机、第二虚拟机、其他一个或多个数量不限的虚拟机(如果有)和虚拟化层均运行于一个设备中,或者运行于若干个物理设备组成的设备***中,并且各虚拟机通过虚拟化层基于设备硬件层实现。本申请的虚拟机可直接运行某些应用程序,或者运行某些操作***,并在操作***环境下运行某些应用程序,虚拟机上运行的操作***可以是安卓(Android)操作***,苹果操作***(iPhone Operating System,iOS),或微软操作***等。
本申请中的通信组件为具有无线或有线通信功能的硬件,可以为调制解调器、网卡、蓝牙组件等,通信组件属于设备硬件层。
为了便于本发明的实施,下面以实例进行说明。
实施例一:
图1示出了本发明实施例一中通信方法的流程示意图,其中图1A为所述通信方法的正向流程示意图,图1B为所述通信方法的逆向流程示意图。
如图1A所示,所述通信方法的正向流程包括:
步骤101、获取第一虚拟机应用的通信请求;
步骤102、在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件。
在步骤101中,第一虚拟机应用为运行在第一虚拟机上的应用程序,该应用程序在需要时会发起通信请求,这里的通信请求与所述应用程序相对应,例如,当所述应用程序为拨号程序时,通信请求可能为语音通话发起请求、挂机请求或来电接通请求;当所述应用程序为浏览器时,通信请求可以为建立网络连接的请求或者下载、发送信息等数据请求。一个应用程序可以发起多种通信请求,任何需要调用通信组件的指令都可以理解为通信请求。
在第一虚拟机和第二虚拟机间建立数据通路,并在第一虚拟机的通信接口层运行代理程序,代理程序将第一虚拟机应用的通信请求通过所述数据通路发送至第二虚拟机,所述数据通路可以是基于虚拟化层或基于其他介质以任何形式实现的,在此不做限制。
在步骤102中,第二虚拟机获取第一虚拟机应用的通信请求后,将其打包为通信组件能够识别和接收的格式的数据包并发送至通信组件。
在第二虚拟机与通信组件具有连接关系的基础上,第二虚拟机上运行的应用可以直接通过第二虚拟机的通信接口层与通信组件建立连接,即将第二虚拟机上运行的应用发起的通信请求打包为通信组件能够识别和接收的格式的数据包并发送至通信组件。本实施例中,第一虚拟机将其上运行的应用程序的所有通信请求均转发至第二虚拟机,通过第二虚拟与所述通信组件建立连接,使第一虚拟机需要时也可直接基于上述连接关系实现通信。
优选的,在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件,包括:在所述第二虚拟机中运行通信接口层通信程序打包所述通信请求,将打包后的通信请求发送至与所述通信接口层通信程序具有第一对应关系的所述通信组件;
第二虚拟机的通信接口层与通信组件建立连接的方式为在通信接口层运行通信接口层通信程序,所述通信接口层通信程序与通信组件相匹配并具有第一对应关系。
所述匹配的含义是,当所述通信组件为调制解调器、网卡、蓝牙等各种有线或无线通信组件等时,和/或当虚拟机运行如Android、iOS或微软等各种操作***时,均有相匹配的通信接口层通信程序,能够将运行在各种环境下的应用程序的通信请求打包为各通信组件能够接收和识别的数据包以实现通信。
所述具有第一对应关系的含义是指所述通信组件与第二虚拟机上的通信接口层通信程序存在对应关系。这一对应关系可能是创建虚拟机时指定的,也可能是用户在已有虚拟机的情况下指定的。
在本实施例中,若虚拟化***架构中只存在唯一的通信组件,如图2A,并且与这个通信组件具有第一对应关系的通信接口层通信程序运行在第二虚拟机上,则说明这个唯一通信组件只与第二虚拟机建立连接并实现通信,因为只有第二虚拟机上运行了与该通信组件有第一对应关系的通信接口层通信程序,此时第二虚拟机中的应用能够正常的连接这个唯一通信组件实现通信;若第一虚拟机上的应用程序希望通过这个唯一的通信组件实现通信,则也只能通过第二虚拟机上运行的与该通信组件有第一对应关系的通信接口层通信程序实现通信;并且,若本实施例的虚拟化***架构中还包括除第一虚拟机和第二虚拟机以外的其他一个或多个虚拟机,如图2B,则这些虚拟机上运行的应用希望通过这个唯一的通信组件实现通信时也需要通过第二虚拟机实现。其中第二虚拟机自身的应用可直接通过第二虚拟机运行的通信程序连接通信组件实现通信,而除第二虚拟机外的其他各虚拟机需要运行代理程序,将其上应用的通信请求均转发至第二虚拟机后再实现通信。
在本实施例中,若存在两个或两个以上通信组件时,每个通信组件均有唯一的与该通信组件存在对应关系的虚拟机以及虚拟机上运行的与该通信组件匹配的通信接口层通信程序。例如虚拟化***架构中存在第一虚拟机和第二虚拟机两个虚拟机,并且存在第一通信组件和第二通信组件两个通信组件的场景中,如图2C,其中第一通信组件与第二虚拟机上的通信接口层运行的第一通信程序存在所述第一对应关系,即第一通信组件只与第二虚拟机建立连接并实现通信,第二虚拟机自身的应用可直接通过第二虚拟机运行的第一通信程序连接通信组件实现通信;而当第一虚拟机上的应用程序需要调用第一通信组件时,则不可直接调用,需要基于通信接口层运行的与第一通信程序对应的第一代理程序将所有通信请求转发至第二虚拟机,通过第二虚拟机运行的第一通信程序与第一通信组件建立的连接实现第一虚拟机上运行的应用对第一通信组件的调用。同理,第二通信组件与第一虚拟机上的通信接口层运行的第二通信程序也存在所述第一对应关系,即第二通信组件只与第一虚拟机建立连接并实现通信,第一虚拟机自身的应用可直接通过第一虚拟机运行的第二通信程序连接通信组件实现通信;而当第二虚拟机上的应用程序需要调用第一通信组件时,则不可直接调用,需要基于通信接口层运行的与第二通信程序对应的第二代理程序将所有通信请求转发至第一虚拟机,通过第一虚拟机运行的第二通信程序与第二通信组件建立的连接实现第二虚拟机上运行的应用对第二通信组件的调用。
再例如虚拟化***架构中存在两个以上虚拟机,并且存在两个以上通信组件的场景中,与各个通信组件具有第一对应关系的各个通信程序可以运行于同一个虚拟机上,也可以分别运行于不同的虚拟机;各个虚拟机上可以运行一个或多个通信程序,也可以不运行通信程序;当某一虚拟机上运行了与某一通信组件对应的通信程序时,该虚拟机上的应用程序可直接通过所述通信程序与所述通信组件建立连接实现通信;当某一虚拟机上未运行某一通信组件对应的通信程序时,需要运行与该通信组件对应的通信程序相关的代理程序,由代理程序转发通信请求至对应的运行了通信程序的虚拟机,再建立连接。如图2D,为上述情况下的一种场景举例,第一虚拟机运行了与第二通信组件对应的第二通信程序,以及与第三通信组件对应的第三通信程序;第二虚拟机运行了与第一通信组件对应的第一通信程序。各虚拟机上运行的应用程序需要通过第二或者第三通信组件进行通信时,只有第一虚拟机上的应用程序可以直接建立连接,除第一虚拟机外其他虚拟机上的应用程序均需要通过各自虚拟机上运行的第二或第三代理程序转发通信请求至第一虚拟机再与第二或第三通信组件建立连接实现通信;各虚拟机上运行的应用程序需要通过第一通信组件进行通信时,只有第二虚拟机上的应用程序可以直接建立连接,除第二虚拟机外其他虚拟机上的应用程序均需要通过各自虚拟机上运行的第一代理程序转发通信请求至第二虚拟机再与第一通信组件建立连接实现通信。
如图1B所示,本实施例一中通信方法的逆向流程包括:
步骤103、接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据;
步骤104、将解析后的通信数据发送至第一虚拟机应用。
步骤103、104与上述步骤101、102对应,为相反顺序的通信流程,相似或重复之处可参照上述步骤101和102。
在步骤103中,第二虚拟机解析通信组件发送的通信数据,即将通信数据解析为虚拟机环境能够识别和接收的格式的数据。在第一虚拟机和第二虚拟机间建立数据通路,第二虚拟机将所述解析后的通信数据经过所述数据通路发送至第一虚拟机,所述数据通路可以是基于虚拟化层或基于其他介质以任何形式实现的,在此不做限制。
在步骤104中,第一虚拟机接收解析后的通信数据,并将其发送至第一虚拟机上运行的应用程序。第一虚拟机需要根据解析后的通信数据内容判断其对应的应用程序,若所述应用程序已启动,则直接发送,若所述应用程序未启动,则启动相关应用程序后再发送。这里与应用程序相对应的解析后的通信数据可以为通信组件能够反馈给应用程序的任何数据,一个应用程序可以获取各种解析后的通信数据。例如当所述应用程序为拨号程序时,解析后的通信数据可能为语音信号,也可能为来电通知或通话对方的挂机信号;当所述应用程序为浏览器时,解析后的通信数据可以为网络连接建立成功的信号反馈,或者浏览器接收、下载的数据内容等。
在第一虚拟机的通信接口层运行代理程序,代理程序接收第二虚拟机经数据通路发送的解析后的通信数据,并将其发送至相应的应用程序。
在第二虚拟机与通信组件具有连接关系的基础上,第二虚拟机上运行的应用可以直接通过第二虚拟机的通信接口层与通信组件建立连接,即第二虚拟机能够接收通信组件发送的通信数据,将其解析为虚拟机应用能够识别和接收的格式的数据包并发送至第二虚拟机上运行的应用程序,本实施例中,第二虚拟机与通信组件进行连接,接收通信组件发送的通信数据进行解析后转发至第一虚拟机,第一虚拟机将所述解析后的通信数据发送至第一虚拟机上运行的应用程序,实现了第一虚拟机应用通过第二虚拟机与所述通信组件连接,使第一虚拟机在需要时也可直接基于上述连接关系实现通信。
优选的,所述在第二虚拟机解析所述通信数据,包括:在所述第二虚拟机中运行通信接口层通信程序解析所述通信数据,其中所述通信组件与所述通信接口层通信程序具有第一对应关系。
第二虚拟机的通信接口层与通信组件建立连接的方式为在通信接口层运行通信接口层通信程序,所述通信接口层通信程序与通信组件相匹配并具有第一对应关系。
所述匹配和第一对应关系的含义与前述通信方法正向流程中的含义相同,只是通信流程为反向,即通信组件将通信数据发送至与其匹配并具有对应关系的某一虚拟机上通信接口层运行的通信程序,再由该通信程序进行数据的转发,未运行相应通信程序的虚拟机需要运行与上述通信程序对应的代理程序以获取所述通信程序转发的数据,再将数据发送至虚拟机上运行的应用程序。反向流程同样适用图2A-2D的虚拟化***架构举例以及相应的对应关系说明。
本实施例中正向和逆向通信流程可以单独实现,并且,因为通信过程可以为多次数据交互的过程,因此上述正向和逆向通信流程也可以同时存在。
实施例二:
图3示出了本发明实施例二中通信方法的流程示意图,其中图3A为所述通信方法的正向流程示意图,图3B为所述通信方法的逆向流程示意图。本实施例二与上述实施例一相似或重复之处可参照上述实施例一的描述。
如图3A所示,所述通信方法的正向流程包括:
步骤301、获取第一虚拟机应用的通信请求;
步骤302、确定所述第一虚拟机应用与通信组件的第二对应关系,根据所述第二对应关系以及第一对应关系确定与所述第一虚拟机应用对应的通信接口层通信程序,其中所述通信接口层通信程序与所述通信组件具有第一对应关系;
步骤303、在所述第二虚拟机中运行通信接口层通信程序打包所述通信请求,将打包后的通信请求发送至与所述通信接口层通信程序具有第一对应关系的所述通信组件。
步骤301与上述步骤101相同,只是在将通信请求通过数据通路发送至第二虚拟机前,还包括步骤302。
当虚拟化***中包含两个或者两个以上虚拟机,并且包含两个或者两个以上通信组件时,获取第一虚拟机应用请求后,还需要在步骤302中获知所述应用请求指向哪个通信组件,以便完成后续通信流程。步骤302中的第一对应关系与上述实施例一中的第一对应关系含义相同,可参考上述描述。
以图2C的架构为例,若判断第一虚拟机应用通信请求需要由第二通信组件实现,则因为第一虚拟机运行的第二通信程序与所述第二通信组件具有第一对应关系,能够直接连接,所以第一虚拟机应用可直接通过第二通信组件实现通信。若判断第一虚拟机应用与第一通信组件具有第二对应关系,即第一虚拟机应用请求指向第一通信组件,需要由第一通信组件为第一虚拟机应用实现通信;并且第一通信组件与第二虚拟机通信接口层中第一通信程序存在第一对应关系;则根据上述第二对应关系和第一对应关系,可知应当将第一虚拟机应用的通信请求发送至第二虚拟机,由第二虚拟机通信接口层运行的第一通信程序继续后续通信流程,因此应当由第一虚拟机上运行的第一代理程序将获取的第一虚拟机应用通信请求通过第一虚拟机和第二虚拟机间的数据通路发送至第一代理程序对应的第一通信程序。
同理以图2D的架构为例,若判断第二虚拟机应用通信请求需要由第一通信组件实现,则直接连接。若判断第二虚拟机应用与第二通信组件具有第二对应关系,即第二虚拟机应用请求指向第二通信组件,则由第二虚拟机上运行的第二代理程序将所述通信请求经数据通路发送至第一虚拟机通信接口层的第二通信程序实现后续通信流程。若判断第二虚拟机应用与第三通信组件具有第二对应关系,即第二虚拟机应用请求指向第三通信组件,则由第二虚拟机上运行的第三代理程序将所述通信请求经数据通路发送至第一虚拟机通信接口层的第三通信程序实现后续通信流程。
优选的,根据预设的所述第一虚拟机与所述通信组件的第三对应关系确定所述第一虚拟机应用与所述通信组件的第二对应关系;或者,获取对应关系选择信息,根据所述对应关系选择信息确定所述第一虚拟机应用与所述通信组件的第二对应关系。
在步骤302中确定第二对应关系,即确定某个虚拟机应用指向哪个通信组件的方式可以为两种之一:
方式一,根据预设的虚拟机与通信组件的对应关系确定,即在搭建虚拟化***架构时设定、建立某个虚拟机时设定,或者在已有的虚拟化***架构中新设定或重新设定某一虚拟机与某一通信组件的对应关系,该设定表明某一虚拟机上的任何应用的通信请求均将指向某一通信组件,即由固定的通信组件为特定虚拟机实现通信。当为各虚拟机设定的对应的通信组件不同时,能够实现各虚拟机应用的通信由不同通信组件实现,通信数据能够有效的隔离。
方式二,根据对应关系选择信息确定,在正向流程中,对应关系选择信息可以为获取应用程序的通信请求时一并获取的用户选择实现通信的通信组件的信息。例如当第一通信组件为WiFi通信组件,而第二通信组件为3G通信组件时,用户在第一虚拟机环境下打开网络浏览器应用时可选择数据连接方式,即可选择通过哪个通信组件实现该应用的通信。基于用户针对某一第一虚拟机应用的对因惯性选择信息,可以建立该第一虚拟机应用与选择的通信组件的第二对应关系。此种方式中,同一虚拟机的不同应用可通过不同的通信组件实现通信,更加灵活。
步骤303与上述步骤102相似,重复之处可参照上述步骤102。在步骤303中,对应的虚拟机中通信接口层运行的通信程序经数据通路接收步骤302中发送的通信请求,打包所述通信请求并发送至对应的通信组件实现通信。
如图3B所示,本实施例二中通信方法的逆向流程包括:
步骤304、接收通信组件发送的通信数据,在所述第二虚拟机中运行通信接口层通信程序解析所述通信数据,其中所述通信组件与所述通信接口层通信程序具有第一对应关系;
步骤305、确定第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述通信接口层通信程序对应的所述第一虚拟机应用;
步骤306、将解析后的通信数据发送至所述第一虚拟机应用。
步骤304-306与上述步骤301-303对应,为相反顺序的通信流程,相似或重复之处可参照上述步骤301-303。
步骤304与上述步骤103相同,只是在第二虚拟机将所述解析后的通信数据经过所述数据通路发送至第一虚拟机前,还包括步骤305。
当虚拟化***中包含两个或者两个以上虚拟机,并且包括一个或多个通信组件时,获取某一通信组件发送的通信数据后,还需要在步骤305中获知所述通信数据指向哪个虚拟机上运行的应用程序,以便完成后续通信流程。步骤305中的第一对应关系与上述实施例一中的第一对应关系含义相同,可参考上述描述。
以图2A或2C的架构为例,第二虚拟机接收到第一通信组件发送的通信数据并进行解析后,若判断该数据指向第二虚拟机的应用程序,则无需将解析后的通信数据转发至其他虚拟机,直接发送至第二虚拟机自身运行的应用程序。若判断所述第一通信组件与某一第一虚拟机应用具有第二对应关系,即所述第一通信组件反馈的通信数据指向所述第一虚拟机上运行的应用程序;则根据上述第二对应关系和第一对应关系,可知第二虚拟机中通信接口层运行的第一通信程序应当将解析后的通信数据通过第一虚拟机和第二虚拟机间的数据通路发送至第一虚拟机,以便在第一虚拟机实现后续通信流程。
同理以图2B或2D的架构为例,第二虚拟机接收到第一通信组件发送的通信数据并进行解析后,若判断该数据指向第二虚拟机的应用程序,则直接发送至第二虚拟机自身运行的应用程序。若判断所述第一通信组件与某一第一虚拟机应用具有第二对应关系,即所述第一通信组件反馈的通信数据指向所述第一虚拟机上运行的应用程序,则第二虚拟机中通信接口层运行的第一通信程序将解析后的通信数据通过第一虚拟机和第二虚拟机间的数据通路发送至第一虚拟机,以便在第一虚拟机实现后续通信流程。同理若判断所述第一通信组件与某一第三虚拟机应用具有第二对应关系则由第一通信程序将解析后的通信数据通过第二虚拟机和第三虚拟机件的数据通路发送至第三虚拟机,以便在第三虚拟机实现后续通信流程。
优选的,根据预设的所述第一虚拟机与所述通信组件的第三对应关系确定所述第一虚拟机应用与所述通信组件的第二对应关系;或者,获取对应关系选择信息,根据所述对应关系选择信息确定所述第一虚拟机应用与所述通信组件的第二对应关系。
在步骤305中确定第二对应关系,即确定某个通信组件发送的通信数据指向哪个虚拟机运行的应用程序的方式可以为两种之一:
方式一,根据预设的虚拟机与通信组件的对应关系确定,即在搭建虚拟化***架构时设定、建立某个虚拟机时设定,或者在已有的虚拟化***架构中初始设定或重新设定某一虚拟机与某一通信组件的对应关系,该设定表明由某一通信组件获得的通信数据均指向某一虚拟机。当为各通信组件设定的对应虚拟机不同时,能够实现某一通信组件专用于处理某一虚拟机的通信数据,而不会处理其他虚拟机的数据,通信数据能够有效的隔离。
方式二,根据对应关系选择信息确定,在逆向流程中,对应关系选择信息可以为解析通信请求后获取的用户选择虚拟机应用的信息。例如当第一通信组件为语音通话组件,其接受到来电通话后,第一通信组件将该通信数据发送至运行在第二虚拟机中通信接口层的第一通信程序,解析该数据请求后在第二虚拟机中弹出提示,提示用户选择由哪个虚拟机处理该来电通话,若用户选择第一虚拟机,则建立第一虚拟机上运行的语音通话应用与所述第一通信组件的第二对应关系。在逆向流程中,对应关系选择信息还可以为在正向通信流程中用户发起通信请求时一并获取的用户选择实现通信的通信组件的信息,此种情况下,在该应用之后多次正向和逆向通信流程中所述应用仍将与所述第一通信组件保持第三对应关系。例如用户在第一虚拟机打开浏览器应用并选择由第一通信组件实现通信,后续第二虚拟机接收到的第一通信组件发送的浏览器应用相关的数据后,将仍然能够根据前述第一虚拟机浏览器应用与所述第一通信组件的对应关系将网络数据反馈给第一虚拟机的浏览器应用。此种方式中,由同一通信组件获取的应用程序通信数据可选择发送至不同虚拟机,由不同虚拟机上运行的相应应用程序处理,更加灵活。
本实施例中正向和逆向通信流程可以单独实现,并且,因为通信过程可以为多次数据交互的过程,因此上述正向和逆向通信流程也可以同时存在。
实施例三:
本发明实施例三以安卓操作环境中的无线接口层守护进程作为通信接口层通信程序,对本发明实施例一进行详细描述。图4示出了本发明实施例三中虚拟化***架构示意图。
移动终端有两个调制解调器Modem,Modem1和Modem2,通常每个Modem会对应一张SIM卡(本实施例中Modem1接入了SIM卡1,Modem2接入了SIM卡2);移动终端建有两个虚拟机,虚拟机VM1和VM2,分别承载各自的操作***和相关的应用程序,便于用户进行隔离操作。
在虚拟机VM1的无线接口层RIL中运行了无线接口层守护进程RILD1(RadioInterface Layer Deamon)和代理无线接口层守护进程pRILD2,在虚拟机VM2中运行了pRILD1和RILD2。虚拟化层Hypervisor可协助分配哪个RILD对应哪个Modem的硬件资源,例如本实施例中建立RILD1与Modem1的对应关系,以及建立RILD2与Modem2的对应关系。即RILD1负责通过Modem1通信的信息及控制,RILD1可通过调用底层库实现VM1上的应用程序和RIL.java与Modem1的对接;RILD2负责和Modem2通信的信息及控制,RILD2可通过调用底层库实现VM2上的应用与RIL.java与Modem2的对接。
VM2中的pRILD1为RILD1前端代理程序,不直接调用底层库(底层库包括RIl.so,QMI,动态链接库libril.so,ril实现库libreference-ril.so等),底层库仅由VM1中的RILD1调用。VM2中的pRILD1可与RILD1实时同步,通过调用VM1中的相关底层库,实现VM2上的应用程序和RIL.java与Modem1的对接。同理,VM1中的pRILD2可与VM2上的RILD2实时同步,通过调用VM2中的相关底层库,实现VM1上的应用和RIL.java与Modem2的对接。
VM1和VM2间通过虚拟化层建立数据通路进行数据传递,这个数据通路负责将VM1中RILD1的数据实时同步到VM2中的pRILD1,同时将pRILD1获取的VM2上层移动终端应用程序对Modem1的操作同步至VM1中的RILD1;对应的数据通路还负责将VM2中RILD2的数据实时同步到VM1中的pRILD2中,同时将pRILD2获取的VM1上层移动终端应用对Modem2的操作同步至VM2中的RILD2。虚拟机间的数据通路基于现有技术实现,在此不做限制。
在上述架构下实现语音通话的方式为:
用户在VM1的操作环境下,可通过Modem1(SIM卡1)拨打电话,过程为用户触发上层拨号应用程序,选择使用SIM卡1打电话,RIL.java将应用请求request通过socket发送给RILD1,RILD1加载底层库后将其打包成AT命令发送至Modem1,同时RILD1将Modem1发送来的消息进行解析,然后通过socket发给RIL.java返回上层应用程序。同理用户在VM2的操作环境下,可通过Modem2(SIM卡2)拨打电话,过程为用户触发上层拨号应用程序,选择使用SIM卡2打电话,RIL.java将应用请求request通过socket发送给RILD2,RILD2加载底层库后将其打包成AT命令发送给Modem2,同时RILD2将Modem2发过来的消息进行解析,然后通过socket发给RIL.java层再返回给上层应用。
当用户在VM1的操作环境下,希望通过Modem2(SIM卡2)拨打电话时,过程为用户触发上层拨号应用程序,选择使用SIM卡2打电话,RIL.java层将应用请求request通过socket发送给pRILD2,pRILD2将用户的请求实时的通过虚拟机间的数据通路发送给VM1中的RILD2,以便VM2中的RILD2加载底层库并将用户请求打包成AT命令发送给Modem2,同时RILD2将Modem2发送来的消息进行解析,之后通过虚拟机间的数据通路将解析后的消息发送给虚拟机pRILD2,由pRILD2通过socket发给VM1的RIL.java层再返回给上层应用;当用户在VM2的操作环境下,希望通过Modem1(SIM卡1)拨打电话时,过程类似上述过程。
有来电时,例如,SIM卡1(Modem1)有来电提示,用户可选择在哪个虚拟机环境下接通该电话,若用户选择在VM1接听,则由RILD1直接在虚拟机1中处理该来电请求。若用户选择在VM2接听,则参照上述过程,由RILD1将来电数据转发至pRILD1,以便由VM2处理该通话。
接听电话的情景中,用户接听SIM卡1(Modem1)的电话时由一个虚拟机处理,此时若用户的号码2(SIM卡2,Modem2)也被呼叫时,可由另一个虚拟机处理,使用户能够获取该呼叫信息并选择是否接听,实现双卡双通;同样的,用户通过某个虚拟机以SIM卡1(Modem1)拨打出电话的过程中,若用户的SIM卡2(Modem2)被呼叫时,可由另一个虚拟机处理,使用户能够获取该呼叫信息并选择是否接听,实现双卡双通。
在上述架构下实现数据通信的方式为:
用户在VM1的操作环境下,可通过Modem1(SIM卡1)建立数据连接,过程为用户触发上层浏览器应用,依设定或者依选择使用SIM卡1的数据连接方式,RIL.java将应用请求request通过socket发送给RILD1,由RILD1建立一个通过Modem1进行数据收发的连接connection1,后续VM1上的各种应用将可以通过这个connection1基于Modem1(SIM卡1)实现数据连接;用户在VM2的操作环境下,可通过Modem2(SIM卡2)建立数据连接,过程同上。
当用户在VM1操作环境下,希望通过Modem2(SIM卡2)建立数据连接时过程为,用户触发上层浏览器应用,选择使用SIM卡2的数据连接方式,RIL.java将应用请求request通过socket发送给pRILD2,pRILD2将用户的请求实时的通过虚拟机间的数据通路发送给VM2中的RILD2,以便VM2中的RILD2加载底层库建立一个通过Modem2进行数据收发的connection2,后续VM1上的各种应用将可以通过这个connection2基于Modem2(SIM卡2)实现数据连接。当用户在VM2的操作环境下,希望通过Modem1(SIM卡1)建立数据连接时,过程类似上述过程。
本实施例中以智能手机为例,说明了当手机上运行了两个安卓操作***的虚拟机时,这两个虚拟机上的应用对两个Modem的调用方法。可以理解的是,在其他实施例中虚拟机可以为其他操作***环境,应用程序不限于拨号应用程序或浏览器应用程序,通信组件也可以是除Modem以外的其他通信组件。当各虚拟机操作***环境不相同时,前述通信程序和/或代理程序在转发通信请求和/或解析后的通信数据时可以进行适应性的数据格式转换,以适应不同虚拟机间操作***的数据差异。
实施例四:
基于同一发明构思,本发明实施例中还提供了一种通信装置,由于这些设备解决问题的原理与一种通信方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。图5示出了本发明实施例四中通信装置的结构示意图,如图所示,所述通信装置500可以包括:
代理模块511,用于获取第一虚拟机应用的通信请求;
通信模块521,用于在第二虚拟机520打包所述通信请求,将打包后的通信请求发送至通信组件;或者,
通信模块521,用于接收通信组件发送的通信数据,在第二虚拟机520解析所述通信数据;
代理模块511,用于将解析后的通信数据发送至第一虚拟机应用。
优选的,所述通信模块521,具体用于在所述第二虚拟机520中运行通信接口层通信程序打包所述通信请求,将打包后的通信请求发送至与所述通信接口层通信程序具有第一对应关系的所述通信组件;或者,
所述通信模块521,具体用于在所述第二虚拟机520中运行通信接口层通信程序解析所述通信数据,其中所述通信组件与所述通信接口层通信程序具有第一对应关系。
优选的,所述装置还包括:
第一确定模块512,用于确定所述第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述第一虚拟机应用对应的所述通信接口层通信程序;或者,
第二确定模块522,用于确定所述第一虚拟机应用与所述通信组件的第二对应关系,根据所述第二对应关系以及所述第一对应关系确定与所述通信接口层通信程序对应的所述第一虚拟机应用。
优选的,所述确定所述第一虚拟机应用与所述通信组件的第二对应关系,包括:根据预设的所述第一虚拟机510与所述通信组件的第三对应关系确定所述第一虚拟机应用与所述通信组件的第二对应关系;或者获取对应关系选择信息,根据所述对应关系选择信息确定所述第一虚拟机应用与所述通信组件的第二对应关系。
优选的,所述第一虚拟机应用运行在安卓(Android)操作环境中,所述通信接口层通信程序为无线接口层守护进程(RILD)。
实施例五:
基于同一发明构思,本发明实施例中还提供了一种通信电子设备,由于所述电子设备解决问题的原理与一种通信方法和一种通信装置相似,因此所述电子设备的实施可以参见方法的实施,重复之处不再赘述。
所述电子设备包括通信组件;以及上述通信装置。
实施例六:
基于同一发明构思,本发明实施例中还提供了一种通信程序产品,由于所述程序产品解决问题的原理与一种通信方法、装置和电子设备相似,因此所述程序产品的实施可以参见方法的实施,重复之处不再赘述。
所述计算机程序产品包括计算机可读的存储介质和内嵌于其中的计算机程序机制,所述计算机程序机制包括用于执行以下步骤的指令:
获取第一虚拟机应用的通信请求,在第二虚拟机打包所述通信请求,将打包后的通信请求发送至通信组件;或者,
接收通信组件发送的通信数据,在第二虚拟机解析所述通信数据,将解析后的通信数据发送至第一虚拟机应用。
为了描述的方便,以上所述装置的各部分以功能分为各种模块分别描述。当然,在实施本发明时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。