具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1所示为根据本发明的较佳实施例提供的单进程多实例通信方法的流程图。如图1所示,本发明的较佳实施例提供的单进程多实例通信方法包括步骤101~103。
步骤101:服务器初始化网络层实例及业务逻辑层实例。
具体而言,所述服务器初始化网络层实例的方式为,所述服务器启动一个网络层默认实例后,所述网络层默认实例依次实例化下一个网络层实例(“实例化”即“创建”)。具体过程为,网络层默认实例实例化第二个网络层实例后,由第二个网络层实例实例化第三个网络层实例,并依此类推。或者所述服务器初始化网络层实例的方式为,所述服务器直接启动一个网络层默认实例及多个网络层实例。
所述服务器初始化业务逻辑层实例的方式为,所述服务器创建多个业务逻辑层实例组,且一种指令对应一个或多个所述业务逻辑层实例组。
步骤102:当客户端向所述服务器发送连接请求时,所述服务器根据预设策略确定目标网络层实例,所述目标网络层实例与所述客户端建立通信连接。
具体而言,若所述服务器初始化网络层实例的方式为,启动一个网络层默认实例后,所述网络层默认实例依次实例化下一个网络层实例。所述预设策略为,当客户端向所述服务器发送连接请求时,所述网络层默认实例接收所述连接请求,并判断自身当前用户承载量是否达到最大用户承载量,若是,则所述网络层默认实例实例化下一个网络层实例,并将所述实例化的网络层实例对象通知客户端,所述客户端根据所述对象重新发送连接请求给所述实例化的网络层实例并建立通信连接,且所述客户端断开与所述网络层默认实例的连接请求。若否,则所述网络层默认实例直接与所述客户端建立连接。于此,所述网络层实例对象包括所述网络层实例名称、地址及端口号。
若所述服务器初始化网络层实例的方式为,直接启动一个网络层默认实例及多个网络层实例,所述预设策略为,当客户端向所述服务器发送连接请求时,所述网络层默认实例接收所述连接请求,并判断自身当前用户承载量是否达到最大用户承载量,若是,所述网络层默认实例发送通知给所述多个网络层实例,所述多个网络层实例计算自身空闲率并发送给网络层默认实例,所述网络层默认实例选择空闲率较高的网络层实例,并将所述选择的网络层实例对象通知客户端,所述客户端根据所述对象重新发送连接请求给所述空闲率较高的网络层实例并建立连接,且所述客户端断开与所述网络层默认实例的连接请求。若否,则所述网络层默认实例直接与所述客户端建立连接。
步骤103:所述服务器的所述目标网络层实例接收所述客户端发送的指令,并根据指令与业务逻辑层实例组的对应关系以及业务逻辑层实例的空闲率将所述指令分配至对应的业务逻辑层实例。
具体而言,在步骤101中,服务器创建了多个业务逻辑层实例组,且一种指令对应一个或多个所述业务逻辑层实例组。所述网络层实例存储所述指令与所述业务逻辑层实例组的对应关系。若一种指令仅对应一个业务逻辑层实例组,所述目标网络层实例根据指令与业务逻辑层实例组的对应关系查找到所述业务逻辑层实例组后,所述业务逻辑层实例组中业务逻辑层实例计算自身空闲率并通知所述业务逻辑层实例组,所述业务逻辑层实例组将各业务逻辑层实例空闲率发送给所述目标网络层实例,所述目标网络层实例选择空闲率较高的业务逻辑层实例处理所述指令。于本实施例中,所述业务逻辑层实例组中业务逻辑层实例也可计算自身空闲率后直接通知所述目标网络层实例,对此本发明并不作限定。
若一种指令对应多个业务逻辑层实例组,所述目标网络层实例根据自身存储的指令与业务逻辑层实例组的对应关系,查找到多个业务逻辑层实例组后,所述多个业务逻辑层实例组计算自身空闲率并通知所述目标网络层实例,所述目标网络层实例选择空闲率较高的业务逻辑层实例组后,选择所述业务逻辑层实例组中空闲率较高的业务逻辑层实例处理所述指令。所述目标网络层实例选择业务逻辑层实例处理所述指令的过程与上述实施例类似,故于此不再赘述。
其中,所述单个实例空闲率的计算方法为,单个实例的最大用户承载量与所述实例当前承载用户量的差值,再除以所述单个实例的最大用户承载量,所得商为所述单个实例空闲率。单个实例组空闲率的计算方法为,所述实例组中所有实例的最大用户承载量总和与所述所有实例当前承载用户量总和的差值,所述差值除以所述实例组中所有实例的最大用户承载量总和,所得商为所述单个实例组空闲率。
举例而言,若服务器初始化网络层实例时仅启动一个网络层默认实例,且所述网络层默认实例的最大用户承载量为50。若某一时刻,所述网络层默认实例接收客户端发送的连接请求后,判断自身用户承载量已达到50,且此时网络层默认实例还没有实例化其它网络层实例。所述网络层默认实例实例化一个网络层实例(即,网络层实例a),并将所述网络层实例a的对象通知客户端。客户端根据所述对象发送请求给网络层实例a并建立连接。
于此,若服务器创建多个业务逻辑层实例组,且一种指令对应一个业务逻辑层实例组。各业务逻辑层实例组与指令对应关系如表1所示。
业务逻辑层实例组 |
包括实例 |
指令种类 |
业务逻辑层实例组1 |
业务逻辑层实例11、12、13 |
Login、Logout |
业务逻辑层实例组2 |
业务逻辑层实例21、22、23 |
AcceptFriend |
业务逻辑层实例组3 |
业务逻辑层实例31、32 |
Text |
业务逻辑层实例组4 |
业务逻辑层实例41、42、43 |
group |
表1
若客户端向服务器发送Text指令,网络层实例a根据表1查找到该指令对应的业务逻辑层实例组3。若业务逻辑层实例31、32最大用户承载量均为100,且此时两者用户承载量分别为35及55。则业务逻辑层实例31计算自身空闲率为(100-35)/100=0.65,业务逻辑层实例32计算自身空闲率为(100-55)/100=0.45。业务逻辑层实例组3将接收到的业务逻辑层实例31、32的空闲率发送给目标网络层实例a,目标网络层实例a选择空闲率较高的业务逻辑层实例31处理所述Text指令。
另一方面,若服务器创建多个业务逻辑层实例组,且一种指令对应多个业务逻辑层实例组。各业务逻辑层实例组与指令对应关系如表2所示。
表2
若客户端向服务器发送AcceptFriend指令,网络层实例a根据表2查找到该指令对应的业务逻辑层实例组B及D。若业务逻辑层实例组B包含的业务逻辑层实例最大用户承载量总和为1000,业务逻辑层实例组D包含的业务逻辑层实例最大用户承载量总和也为1000,且此时业务逻辑层实例组B中所有业务逻辑层实例的当前承载用户量总和为280,业务逻辑层实例组D中所有业务逻辑层实例的当前承载用户量总和为600。则业务逻辑层实例组B的空闲率为(1000-280)/1000=0.72,业务逻辑层实例组D的空闲率为(1000-600)/1000=0.4。目标网络层实例(例如为网络层实例a)接收到业务逻辑层实例组B及D发送的空闲率后,选择空闲率较高的业务逻辑层实例组B。所述目标网络层实例通知所述业务逻辑层实例组B中各业务逻辑层实例计算并返回自身空闲率,其中各业务逻辑层实例计算自身空闲率的方式与上一实施例中各业务逻辑层实例计算方式相同,故于此不再赘述。所述目标网络层实例选择业务逻辑层实例组B中空闲率较高的业务逻辑层实例处理所述AcceptFriend指令。于上述实施例中,若有多个所述实例或者实例组空闲率最高且相等,则随机选择其中一个实例或者实例组,对此本发明并不作限定。
图2所示为根据本发明的较佳实施例提供的单进程多实例通信系统的示意图。如图2所示,本发明的较佳实施例提供的单进程多实例通信系统包括客户端201及服务器202,所述客户端201连接所述服务器202。所述客户端201,用于向所述服务器202发送连接请求,并于建立与所述服务器202的连接后,向所述服务器202发送指令。所述服务器202,用于初始化网络层实例及业务逻辑层实例,并于接收所述客户端201的连接请求后,根据预设策略确定与所述客户端201建立通信连接的目标网络层实例;还用于接收所述客户端201发送的指令后,根据所述指令与业务逻辑层实例组的对应关系以及业务逻辑层实例的空闲率将所述指令分配至对应的业务逻辑层实例。关于上述系统的操作流程同上述方法所述,故于此不再赘述。
综上所述,根据本发明提供的单进程多实例通信方法及系统,服务器初始化网络层实例及业务逻辑层实例后,服务器接收到客户端的连接请求时,根据预设策略确定与客户端建立通信连接的目标网络层实例,可充分提高网络层实例的资源利用率。服务器的目标网络层实例接收客户端发送的指令,并根据指令与业务逻辑层实例组的对应关系以及业务逻辑层实例的空闲率将所述指令分配至对应的业务逻辑层实例,实现了单进程多功能实例业务处理,节省了资源开销。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。