发明内容
本申请实施例提供一种服务器节点的选择方法和终端设备,用以从多个服务器节点中选择网络质量较好的服务器节点。
第一方面,本申请实施例提供一种服务器节点的选择方法,该方法适用于终端设备。所述包括:终端设备向DNS服务器发送域名解析请求,所述域名解析请求中携带有域名,所述域名解析请求用于请求与所述域名对应的IP地址;所述终端设备接收所述DNS服务器反馈的N个IP地址,所述N个IP地址中每个IP地址对应一个服务器节点,N大于等于2;所述终端设备在第一时刻向N个服务器节点中的一个服务器节点发送连接请求;若所述终端设备在第二时刻之前接收到所述一个服务器节点反馈的响应信息,则所述终端设备与所述一个服务器节点建立连接;若所述终端设备在第二时刻之前未接收到所述一个服务器节点反馈的响应信息,则所述终端设备在所述第二时刻向所述N个服务器节点中的另一个服务器节点发送连接请求;所述终端设备在所述第二时刻到第三时刻之间接收到第一个响应信息;所述终端设备与发送所述第一个响应信息的服务器节点建立连接;其中,发送所述第一个响应信息的是所述一个服务器节点或者所述另一个服务器节点。
在本申请实施例中,一方面,终端设备以一定的时间间隔向服务器节点发送连接请求(终端设备先向一个服务器节点发送连接请求,间隔时间T后,再向另一个服务器节点发送连接请求),可以避免并发的访问量的突然增加。终端设备先向第一服务器节点发送连接请求,如果在第一预设时长T内收到第一服务器节点反馈的响应信息,则终端设备不需要再向其它服务器节点发送连接请求,有助于节省资源。另一方面,终端设备可以和接收到的第一个响应信息对应的服务器节点建立连接,无需等待其它服务器节点的反馈,有助于降低终端设备与服务器节点连接的时延。
在一种可能的设计中,所述终端设备接收到的第二个响应信息时,不响应或者丢弃所述第二个响应信息;其中,发送所述第二个响应信息的服务器节点是所述一个服务器节点或者所述另一个服务器节点,且与所述发送第一个响应信息的服务器节点不同。
举例来说,终端设备接收到的第一个响应信息是服务器节点1发送的,那么终端设备和服务器节点1建立连接。若终端设备后续接收到服务器节点2的响应信息,可以不处理或者丢弃服务器2的响应信息。通过这种方式,有助于提高终端设备的处理效率,节省不必要的计算量。
在一种可能的设计中,若所述第一个响应信息是所述一个服务器节点发送的,所述终端设备与发送所述第一个响应信息的服务器节点建立连接之前,所述终端设备从接收到所述第一个响应信息的第四时刻开始等待第一预设时长,确定在所述第一预设时长内未接收到所述另一个服务器节点发送的响应信息;其中,所述第一预设时长小于所述第四时刻到所述第三时刻之间的时间差。
在本申请实施例中,以所述一个服务器节点是服务器节点1,所述另一个服务器节点是服务器节点2为例。由于终端设备是先向服务器节点1发送连接请求,后向服务器节点2发送连接请求的。在终端设备向服务器节点2发送连接请求后,假设终端设备接收到的第一个响应信息是服务器节点1发送的,终端设备接收到第一个响应信息后可以等待一段时间。若在这段时间内,收到服务器节点2反馈的响应信息,说明服务器节点2的响应较快,终端设备与服务器节点2建立连接。若在这段时间内,未收到服务器节点2反馈的响应信息,则终端设备与服务器节点1建立连接。通过这种方式,终端设备可以灵活的选择与服务器节点1建立连接还是与服务器节点2建立连接。
在一种可能的设计中,所述第一时刻和所述第二时刻之间的时间差为第一时长T,所述第二时刻和所述第三时刻之间的时间差为所述第一时长T。
在本申请实施例中,第一时刻与所述第二时刻、第二时刻与所述第三时刻之间的时间差是相同的T。当然,第二时刻与所述第三时刻、第二时刻与所述第三时刻之间的时间差也可以不同,本申请实施例对此不作限定。
在一种可能的设计中,所述终端设备向发送所述第一个响应信息的服务器节点发送网络资源请求,所述网络资源请求用于请求网络资源;若所述终端设备在第二预设时长内未接收到所述发送所述第一个响应信息的服务器节点反馈的网络资源,所述终端设备向所述发送第二个响应信息的服务器节点发送网络资源请求。
在本申请实施例中,终端设备与发送第一个响应信息的服务器节点建立连接之后,终端设备向该服务器节点请求网络资源。若终端设备迟迟未收到第一个响应信息的服务器节点反馈的网络资源,终端设备向发送第二个响应信息的服务器节点请求网络资源。通过这种方式,有助于降低终端设备请求网络资源的时延。
在一种可能的设计中,若所述终端设备在所述第三时刻之前未接收到所述一个服务器节点或者所述另一个服务器节点发送的响应信息,则所述终端设备在所述第三时刻向所述N个服务器节点中的第三服务器节点发送连接请求;所述终端设备在所述第三时刻到第五时刻之间接收到第一个响应信息时,所述终端设备与发送所述第一个响应信息的服务器节点建立连接;其中,发送所述第一个响应信息的是所述一个服务器节点、所述另一个服务器节点或者所述第三服务器节点。
在本申请实施例中,一方面,终端设备以一定的时间间隔向服务器节点发送连接请求,有助于节省资源。另一方面,若终端设备以一定的时间间隔向多个服务器节点发送了连接请求后。终端设备可以和接收到的第一个响应信息对应的服务器节点建立连接,无需等待其它服务器节点的反馈,有助于降低时延。
在一种可能的设计中,所述第三时刻和所述第五时刻之间的时间差为所述第一时长T。
在本申请实施例中,第一时刻与所述第二时刻、第二时刻与所述第三时刻、第三时刻与所述第五时刻之间的时间差可以是相同的T。当然,第二时刻与所述第三时刻、第二时刻与所述第三时刻、第三时刻与所述第五时刻之间的时间差也可以不同,本申请实施例对此不作限定。
第二方面,本申请实施例提供一种服务器节点的选择方法,该方法适用于终端设备,所述方法包括:终端设备向DNS服务器发送域名解析请求,所述域名解析请求中携带有域名,所述域名解析请求用于请求与所述域名对应的IP地址;所述终端设备接收所述DNS服务器反馈的N个IP地址,所述N个IP地址中每个IP地址对应一个服务器节点,N大于等于2;所述终端设备在第一时刻向N个服务器节点中的一个服务器节点发送连接请求;若所述终端设备在第二时刻之前接收到所述一个服务器节点反馈的响应信息,则所述终端设备与所述一个服务器节点建立连接;若所述终端设备在第二时刻之前未接收到所述一个服务器节点反馈的响应信息,则所述终端设备在所述第二时刻向所述N个服务器节点中的另一个服务器节点发送连接请求;所述终端设备在所述第二时刻到第三时刻之间的第四时刻接收到所述一个服务器节点反馈的响应信息;所述终端设备从所述第四时刻开始,等待第一预设时长,其中,所述第一预设时长小于所述第四时刻到所述第三时刻之间的时间差;若所述第一预设时长内接收到所述另一个服务器节点发送的响应信息,则所述终端设备与所述另一个服务器节点建立连接。
在本申请实施例中,以所述一个服务器节点是服务器节点1,所述另一个服务器节点是服务器节点2为例。一方面,终端设备以一定的时间间隔向服务器节点发送连接请求(终端设备先向服务器节点1发送连接请求,间隔时间T后,再向服务器节点2发送连接请求)。比如,终端设备先向服务器节点1发送连接请求,如果在第一预设时长T内收到服务器节点1反馈的响应信息,则终端设备不需要再向其它服务器节点发送连接请求,有助于节省资源。另一方面,在终端设备向服务器节点2发送连接请求后,假设终端设备先接收到服务器节点1反馈的响应信息,则终端设备可以等待一段时间,若在这段时间内,终端设备接收到服务器节点2反馈的响应信息,说明服务器节点2的响应较快,所以终端设备可以与服务器节点2建立连接。通过这种方式,终端设备可以从服务器节点1和服务器节点2选择响应较快的一个服务器节点建立连接,有助于降低时延。
在一种可能的设计中,所述第一时刻和所述第二时刻之间的时间差为第一时长T,所述第二时刻和所述第三时刻之间的时间差为所述第一时长T。
在一种可能的设计中,所述终端设备向发送所述另一个服务器节点发送网络资源请求,所述网络资源请求用于请求网络资源;若所述终端设备在第二预设时长内未接收到所述发送所述另一个服务器节点反馈的网络资源,所述终端设备向所述一个服务器节点发送网络资源请求。
第三方面,本申请实施例提供一种服务器节点的选择方法,该方法适用于终端设备。所述方法包括:终端设备向DNS服务器发送域名解析请求,所述域名解析请求中携带有域名,所述域名解析请求用于请求与所述域名对应的IP地址;所述终端设备接收所述DNS服务器反馈的N个IP地址,所述N个IP地址中每个IP地址对应一个服务器节点,N大于等于2;所述终端设备在第一时刻向N个服务器节点中的一个服务器节点发送连接请求;若所述终端设备在第二时刻之前接收到所述一个服务器节点反馈的响应信息,则所述终端设备与所述一个服务器节点建立连接;若所述终端设备在第二时刻之前未接收到所述一个服务器节点反馈的响应信息,则所述终端设备在所述第二时刻向所述N个服务器节点中的另一个服务器节点发送连接请求;
若所述终端设备同时接收到所述一个服务器节点和所述另一个服务器节点反馈的两个响应信息,所述终端设备与两个响应信息中的第一响应信息对应的服务器节点建立连接。
在本申请实施例中,以所述一个服务器节点是服务器节点1,所述另一个服务器节点是服务器节点2为例。一方面,终端设备以一定的时间间隔向服务器节点发送连接请求(终端设备先向服务器节点1发送连接请求,间隔时间T后,再向服务器节点2发送连接请求)。比如,终端设备先向服务器节点1发送连接请求,如果在第一预设时长T内收到服务器节点1反馈的响应信息,则终端设备不需要再向其它服务器节点发送连接请求,有助于节省资源。另一方面,终端设备向服务器节点2发送连接请求后,同时接收到服务器节点1和服务器节点2反馈的响应信息时,认为两个服务器节点的网络质量均可以,所以,终端设备与两个响应信息中的第一响应信息对应的服务器节点建立连接即可。通过这种方式,有助于降低终端设备与服务器节点建立连接的时延。
在一种可能的设计中,所述终端设备与两个响应信息中的第一响应信息对应的服务器节点建立连接,包括:若所述终端设备先处理所述两个响应信息中的所述第一响应信息,所述终端设备与发送所述第一响应信息的服务器节点建立连接。
在本申请实施例中,终端设备同时接收到服务器节点1和服务器节点2反馈的响应信息时,先处理哪个响应信息,便与哪个响应信息对应的服务器节点建立连接。通过这种方式,有助于降低终端设备与服务器节点建立连接的时延。
在一种可能的设计中,所述终端设备与两个响应信息中的第一响应信息对应的服务器节点建立连接,包括:所述终端设备确定发送所述第一响应信息的服务器节点的响应时间小于发送所述第二响应信息的服务器节点的响应时间;所述终端设备与发送所述第一响应信息的服务器节点建立连接。
在本申请实施例中,终端设备同时接收到两个服务器节点反馈的响应信息时,哪个服务器节点的响应较快,就与哪个服务器节点建立连接。通过这种方式,有助于降低终端设备与服务器节点建立连接的时延。
在一种可能的设计中,所述终端设备向发送所述第一响应信息的服务器节点发送网络资源请求,所述网络资源请求用于请求网络资源;若所述终端设备在第二预设时长内未接收到所述发送所述第一响应信息的服务器节点反馈的网络资源,所述终端设备向所述发送所述第二响应信息的服务器节点发送网络资源请求。
第四方面,本申请实施例提供一种终端设备,包括处理器和存储器。其中,存储器用于存储一个或多个计算机程序;当存储器存储的一个或多个计算机程序被处理器执行时,使得终端设备能够实现第一方面或者第一方面的任意一种可能的设计的方法;或者,当存储器存储的一个或多个计算机程序被处理器执行时,使得终端设备能够实现第二方面或者第二方面的任意一种可能的设计的方法;或者,当存储器存储的一个或多个计算机程序被处理器执行时,使得终端设备能够实现第三方面或者第三方面的任意一种可能的设计的方法。
第五方面,本申请实施例还提供了一种终端设备,所述终端设备包括执行第一方面或者第一方面的任意一种可能的设计的方法的模块/单元;或者,所述终端设备包括执行第二方面或者第二方面的任意一种可能的设计的方法的模块/单元;或者,所述终端设备包括执行第三方面或者第三方面的任意一种可能的设计的方法的模块/单元;这些模块/单元可以通过硬件实现,也可以通过硬件执行相应的软件实现。
第六方面,本申请实施例中还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当计算机程序在终端设备上运行时,使得所述终端设备执行第一方面或上述第一方面的任意一种可能的设计的方法;或者,当计算机程序在终端设备上运行时,使得所述终端设备执行第二方面或上述第二方面的任意一种可能的设计的方法;或者,当计算机程序在终端设备上运行时,使得所述终端设备执行第三方面或上述第三方面的任意一种可能的设计的方法。
第七方面,本申请实施例还提供一种包含计算机程序产品,当所述计算机程序产品在终端设备上运行时,使得所述终端设备执行第一方面或上述第一方面的任意一种可能的设计的方法;或者,当所述计算机程序产品在终端设备上运行时,使得所述终端设备执行第二方面或上述第二方面的任意一种可能的设计的方法;或者,当所述计算机程序产品在终端设备上运行时,使得所述终端设备执行第三方面或上述第三方面的任意一种可能的设计的方法。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
以下,对本申请中的部分用语进行解释说明,以便与本领域技术人员理解。
本申请实施例涉及的客户端,可以是请求网络资源的软件或者硬件模块。以终端设备是手机为例,客户端可以是手机中的应用程序(application,简称app),比如百度app、搜狐app等。以百度app为例,百度app可以用于请求视频、图片、文字等网络资源。
本申请实施例涉及的DNS查询请求设备,可以是向DNS服务器发送域名解析请求的软件或硬件模块,其中,域名解析请求中包括域名,所述域名解析请求用于请求DNS确定与所述域名对应的IP地址。以终端设备是手机为例,DNS查询请求设备可以是手机中的软件或硬件模块。
需要说明的是,以DNS查询请求设备是手机中的软件模块为例,该软件模块可以集成在前述的客户端即app中,或者集成在手机中的操作系统(比如,Andoid)中。若DNS查询请求设备集成在手机中的操作系统中,以Andoid操作系统为例,DNS查询请求设备可以是手机中的Okhttp。在下文的介绍中,以DNS查询请求设备是手机中的Okhttp为例进行描述。
本申请实施例涉及的应用程序,为完成某项或多项特定工作的计算机程序。以手机为例,手机运行一个应用程序时,可以显示该应用程序的显示界面,在该显示界面中,可以实现人机交互。通常,一个应用程序可以实现特定的功能。例如应用程序包括:例如,百度应用、搜狐应用、各种邮箱应用、微信、腾讯聊天软件(QQ)、WhatsApp Messenger、连我(Line)、照片分享(instagram)、Kakao Talk、钉钉等。
本申请实施例涉及的DNS服务器,存储有域名和IP地址的对应关系,用于根据域名查询与所述域名对应的IP地址。其中,DNS服务器还可以被称为其它名称,比如域名系统、域名解析服务器、域名解析系统等等,即本申请实施例对DNS服务器的名称不作限定。
本申请实施例涉及的统一资源定位符(uniform resource locator,URL),可以用于请求网络资源。通常,URL中包括域名,举例来说,如果URL是www.baidu.com/?fr=mhd_card,则域名是baidu.com;如果URL是www.sina.com,域名为sina.com。
本申请实施例涉及的服务器节点,通常,ICP可以在不同的地点部署服务器节点。ICP可以将网络资源分布存储在不同的服务器节点中,终端设备可以从服务器节点中访问网络资源。
在本申请实施例中,服务器节点还可以有其它名称,比如节点服务器、应用服务器、节点设备、节点等,本申请实施例不作限定,只有表述如上意思即可。
本申请实施例涉及的ICP,用于提供特定的网络资源的互联网内容供应商,比如京东、亚马逊、百度、新浪等等。其中,互联网内容供应商还可以被称为其它名称,比如内容服务商、网络内容供应商、网络内容提供商等等,即本申请实施例对内容服务器的名称不作限定,只要表述如上的意思即可。
本申请实施例涉及的互联网服务提供商(internet service provider,ISP),用于为终端设备提供互联网接入业务的运营商,即终端设备通过ISP访问ICP中的网络资源、其中,ISP可以是电信、联通、移动、长城宽带等。
以ISP是电信为例,且以ICP是百度为例,通常,电信会在不同的地点部署不同的服务器节点,百度可以购买电信部署在各个地点的服务器节点。比如,电信部署在广州、深圳、东莞的三个服务器节点,若这三个服务器节点被百度购买,那么客户端便可以通过这三个服务器节点访问百度提供的网络资源。
本申请实施例涉及的网络资源,包括视频、图片、文字等等。不同的ICP提供不同的网络资源。比如,优酷是专门提供视频资源的ICP。
本申请实施例涉及的至少一个,是指一个或多个;本申请实施例涉及的多个,是指两个或两个以上。
另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
本申请实施例提供一种服务器节点的选择方法,在该方法中,客户端接收到DNS服务器反馈的IP地址列表后,客户端向IP地址列表中的不同的IP地址对应的服务器节点发送连接请求(可以有不同的实现方式,将在后文介绍),客户端先接收到哪个服务器节点反馈的响应信息,便与哪个服务器节点建立连接。通常,客户端先接收到哪个服务器节点反馈的响应信息,说明该服务器节点的网络质量较好,所以,本申请实施例提供的服务器节点的选择方法,可以从多个服务器节点中选择一个网络质量较好的服务器节点。
图2示出了本申请实施例提供的一种应用场景的示意图。如图2所示,所述应用场景中包括:手机、DNS服务器、至少一个服务器节点。在图2中,以三个服务器节点为例。
如图2所示,手机向DNS服务器发送域名解析请求,该域名解析请求中携带有域名。DNS服务器接收到所述域名解析请求之后,根据所述域名确定与所述域名对应的一个或多个IP地址,生成IP地址列表。比如,IP地址列表中包括三个IP地址,每个IP地址对应一个服务器节点(比如,IP1对应服务器节点1、IP2对应服务器节点2、IP3对应服务器节点3)。DNS服务器向手机发送IP地址列表。
手机接收到IP地址列表后,向三个服务器节点发送连接请求。第一种可能的实现方式为,手机在t1时刻向服务器节点1发送连接请求,在t1+T时刻向服务器节点2发送连接请求,在t1+2T时刻向服务器节点3发送连接请求。第二种可能的实现方式为,手机同时向服务器节点1、服务器节点2、服务器节点3发送连接请求(图2中未示出)。
手机先接收到哪个服务器节点反馈的响应信息,便与哪个服务器节点建立连接。在后一个接下来的T间隔到达时,就不再向其它服务器节点发送连接请求。比如手机先接收到服务器节点3发送的响应信息,则手机与服务器节点3建立连接。如果IP地址列表中还有IP4,IP4对应服务器节点4,则客户端在t1+3T时刻不向服务器节点4发送连接请求。通常,手机先接收到哪个服务器节点,说明该服务器节点的网络质量较好,所以,本申请实施例提供的服务器节点的选择方法,可以从多个服务器节点中选择一个网络质量较好的服务器节点。
为了更清楚的描述本申请实施例的技术方案,下面介绍图2所示的应用场景中手机的硬件结构图。请参见图3,为本申请实施例提供的手机的硬件结构示意图。应该理解的是,图3所示的手机300仅是一个范例,并且手机300可以具有比图中所示出的更多的或者更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。图3中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
如图3所示,手机300具体可以包括:一个或多个处理器301、射频(radiofrequency,RF)电路302、存储器303、触摸屏304、蓝牙装置305、一个或多个传感器306、Wi-Fi装置307、定位装置308、音频电路309、外设接口310以及电源系统311等部件。这些部件可通过一根或多根通信总线或信号线(图3中未示出)进行通信。本领域技术人员可以理解,图3中示出的硬件结构并不构成对手机300的限定,手机300可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图3对手机300的各个部件进行具体的介绍:
处理器301是手机300的控制中心,利用各种接口和线路连接手机300的各个部分,通过运行或执行存储在存储器303内的应用程序,以及调用存储在存储器303内的数据和指令,执行手机300的各种功能和处理数据。在一些实施例中,处理器301可包括一个或多个处理单元。处理器301可以包括应用处理器(application processor,AP),调制解调处理器等。其中,处理器301包括的不同的处理单元可以是独立的器件,也可以是集成在同一个处理器中。以处理器301集成应用处理器和调制解调处理器为例;其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器301中。
射频电路302可用于在收发信息或通话过程中,无线信号的接收和发送。具体地,射频电路302可以将基站的下行数据接收后,给处理器301处理;另外,将涉及上行的数据发送给基站。通常,射频电路包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频电路302还可以通过无线通信和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统、通用分组无线服务、码分多址、宽带码分多址、长期演进、电子邮件、短消息服务等。
存储器303用于存储应用程序以及数据,处理器301通过运行存储在存储器303的应用程序以及数据,执行手机300的各种功能以及数据处理。存储器303主要包括存储程序区以及存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等);存储数据区可以存储根据使用手机300时所创建的数据(比如音频数据、电话本等)。此外,存储器303可以包括高速随机存取存储器,还可以包括非易失存储器,例如磁盘存储器件、闪存器件或其他非易失性固态存储器件等。存储器303可以存储各种操作系统,例如苹果公司所开发的IOS操作系统,谷歌公司所开发的Android操作系统等。示例性地,存储器303中存储了与本申请实施例相关的应用程序,例如Taskcard store、推特、电话本、微博等。
触摸屏304可以包括触敏表面304-1和显示器304-2。其中,触敏表面304-1(例如触控面板)可采集手机300的用户在其上或附近的触摸事件(比如用户使用手指、触控笔等任何适合的物体在触敏表面304-1上或在触敏表面304-1附近的操作),并将采集到的触摸信息发送给其他器件例如处理器301。显示器(也称为显示屏)304-2可用于显示由用户输入的信息或提供给用户的信息以及手机300的各种菜单。可以采用液晶显示器、有机发光二极管等形式来配置显示器304-2。触敏表面304-1可以覆盖在显示器304-2之上,当触敏表面304-1检测到在其上或附近的触摸事件后,传送给处理器301以确定触摸事件的类型,随后处理器301可以根据触摸事件的类型在显示器304-2上提供相应的视觉输出。虽然在图3中,触敏表面304-1与显示屏304-2是作为两个独立的部件来实现手机300的输入和输出功能,但是在某些实施例中,可以将触敏表面304-1与显示屏304-2集成而实现手机300的输入和输出功能。
手机300还可以包括蓝牙装置305,用于实现手机300与其他短距离的电子设备(例如手机、智能手表等)之间的数据交换。本申请实施例中的蓝牙装置可以是集成电路或者蓝牙芯片等。
手机300还可以包括至少一种传感器306,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节触摸屏304的显示器的亮度,接近传感器可在手机300移动到耳边时,关闭显示器的电源。
在本申请一些实施例中,传感器306还可以包括指纹传感器312。例如,可以在手机300的背面(例如后置摄像头的下方)配置指纹传感器312,或者在手机300的正面(例如触摸屏304的下方)配置指纹传感器312。本申请实施例中的指纹传感器312可以采用任何类型的感测技术,包括但不限于光学式、电容式、压电式或超声波传感技术等。
至于手机300还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不予赘述。
Wi-Fi装置307,用于为手机200提供遵循Wi-Fi相关标准协议的网络接入,手机300可以通过Wi-Fi装置307接入到Wi-Fi接入点,进而帮助用户收发电子邮件、浏览网页和访问流媒体等,它为用户提供了无线的宽带互联网访问。在其他一些实施例中,该Wi-Fi装置307也可以作为Wi-Fi无线接入点,可以为其他电子设备提供Wi-Fi网络接入。
定位装置308,用于为手机300提供地理位置。可以理解的是,该定位装置308具体可以是全球定位系统(global positioning system,GPS)、北斗卫星导航系统等定位系统的接收器。
音频电路309、扬声器313、麦克风314可提供用户与手机300之间的音频接口。音频电路309可将接收到的音频数据转换后的电信号,传输到扬声器313,由扬声器313转换为声音信号输出;另一方面,麦克风314将收集的声音信号转换为电信号,由音频电路309接收后转换为音频数据,再将音频数据输出至RF电路302以发送给比如一个手机,或者将音频数据输出至存储器303以便进一步处理。
外设接口310,用于为外部的输入/输出设备(例如键盘、鼠标、外接显示器、外部存储器、用户识别模块卡等)提供各种接口。例如通过通用串行总线接口与鼠标连接,通过用户识别模块卡卡槽上的金属触点与电信运营商提供的用户识别模块(subscriberidentity module,SIM)卡连接。外设接口310可以被用来将上述外部的输入/输出外围设备耦接到处理器301和存储器303。
手机300还可以包括给各个部件供电的电源装置311(比如电池和电源管理芯片),电池可以通过电源管理芯片与处理器301逻辑相连,从而通过电源装置311实现管理充电、放电、以及功耗管理等功能。
以下实施例中客户端的行为均可以在具有上述硬件结构的手机中实现。
图4示出了本申请实施例提供的手机300的软件架构图。在图4中,以手机300是安卓操作系统为例。如图4所示,手机300的软件架构包括4层:内核层(kernel layer)、硬件抽象层(hardware abstraction layer)、应用程序框架层(applications framework layer)以及应用程序层(applications layer)。当然,图4所示的软件架构中,在内核层和应用程序框架层之间还可以包含系统运行库层(libraris layer)(图4中未示出),该系统运行库层为上层即框架层提供支撑,当框架层被使用时,安卓操作系统会运行系统运行库层中包含的C/C++库以实现框架层要实现的功能。
其中,应用程序层(下文简称应用层),包括各种应用程序,例如网页浏览器、即时通信应用程序(比如微信、QQ等)等。以网页浏览器为例,用户通过手机300的触敏表面304-1点击浏览器的图标,触发处理器301启动浏览器,显示器304-2显示浏览器的显示界面。用户通过触敏表面304-1在所述显示界面中输入网址(比如,http//www.baidu.com)。
应用程序框架层(下文简称框架层),包括OKhttp。OKhttp用于通过传输协议对网址进行封装,传输协议包括传输控制协议(transmission control protocol,TCP)、互联网协议(internet protocol,IP)等等。
硬件抽象层,包括网络进程(network daemon,Netd)和库函数(libraryfunction,简称Libc)。Netd用于连接内核层和框架层。Netd可以用于存储DNS服务器的信息、服务器节点的IP地址等,还可以用于触发内核层中的RF电路驱动。
内核层,包含输入/输出设备(比如键盘、触摸屏、耳机、扬声器、麦克风、RF电路等)的驱动。
在本申请的一些实施例中,图4所示的手机300中的应用层中的app可以是客户端(下文中以浏览器为例)。OKhttp可以是前述的DNS查询请求设备;或者,OKhttp、Netd和Libc一起构成DNS查询请求设备,即OKhttp在Netd和Libc的辅助下,完成DNS解析请求的发送和IP地址的接收,服务器节点的选择、连接等过程。下面介绍通过图3和图4所示的手机实现本申请实施例的提供的服务器节点的选择方法的过程。
应理解,图3是本申请实施例的手机300的硬件架构,图4是本申请实施例的手机300的软件架构,所以,图4中的软件架构对应的软件程序和/或模块可以存储在存储器303中,处理器301运行存储器303中存储的所述软件程序和/或模块以执行如下过程:
(1)、以应用层中的浏览器为例,浏览器将用户输入的网址即URL(前述内容中已经描述了用户在浏览器的显示界面中输入网址的过程,在此不重复介绍)发送给框架层中的OKhttp。OKhttp接收到浏览器发送的网址后,从所述网址中提取域名。OKhttp将提取的域名发送给Netd。
(2)、Netd接收到域名后,根据DNS解析命令,得到域名解析请求,并将所述域名解析请求发送给DNS服务器。比如,Netd调用RF电路驱动,启动RF电路。RF电路将所述域名解析请求发送给DNS服务器。作为一种示例,Netd中可以存储DNS服务器的信息,比如Netd中存储有多个DNS服务器的地理位置。Netd接收到域名解析请求,可以从多个DNS服务器中确定一个与手机300当前的地理位置最近的DNS服务器,RF电路将域名解析请求发送给确定出的DNS服务器。
(3)、RF电路接收到DNS服务器返回的IP地址列表后,将该IP地址列表返回给Netd。Netd将该IP地址列表返回给Okhttp。Okhttp生成第一握手请求,所述第一握手请求用于请求与第一服务器节点建立连接,第一服务器节点的IP地址为所述IP地址列表中的第一IP地址。Okhttp将该第一握手请求发送给Libc。Libc调用RF电路驱动,启动RF电路。RF电路向所述第一个服务器节点发送第一握手请求。
(4)、Okhttp开始计时,若在第一预设时间内,Okhttp未接收到所述第一个服务器节点反馈的响应信息,Okhttp生成第二握手请求,所述第二握手请求用于请求与第二服务器节点建立连接,所述第二服务器节点的IP地址为所述IP地址列表中的第二IP地址。Okhttp将所述第二握手请求发送给Libc。Libc调用RF电路驱动,启动RF电路。RF电路将所述第二握手请求发送给所述第二个服务器节点。
(5)、假设Okhttp先接收到了第一服务器节点反馈的响应信息,Okhttp将网络资源请求(比如,网络资源请求可以从URL中提取,若URL是指www.baidu.com/?fr=mhd_card,则网络资源请求可以是/?fr=mhd_card)发送给第一服务器节点。比如,Okhttp可以调用Libc,Libc调用RF电路驱动,启动RF电路。RF电路将所述请求网络资源发送给所述第一服务器节点。RF电路接收到第一服务器节点反馈的网络资源时,将网络资源发送给Libc,Libc将网络资源发送给Okhttp。Okhttp将所述网络资源发送给浏览器。
在上述的(1)-(5)步中,是以手机300以一定的时间间隔向第一服务器节点和第二服务器节点发送连接请求为例的,实际上手机300还可以同时向第一服务器节点和第二服务器节点发送连接请求,在此不多赘述。
图5示出了本申请实施例提供的一种服务器节点的选择方法的流程示意图。所述方法适用于图2所示的应用场景中。需要说明的是,图5中手机300所执行的步骤可以由DNS查询请求设备(比如手机中的OKhttp)执行。
如图5所示,所述流程包括:
S501:手机300向DNS服务器发送域名解析请求,所述域名解析请求中携带有域名,所述域名解析请求用于请求解析与所述域名对应的IP地址;相应的,DNS服务器接收手机300发送的域名解析请求。
手机300向DNS发送域名解析请求之前,可以选择从多个DNS服务器中选择一个DNS服务器,并将域名解析请求发送给选择出的DNS服务器。前述已经介绍过手机300选择DNS服务器,并将所述域名解析请求发送给所述DNS服务器的过程,在此不再赘述。当然,手机300也可以不选择DNS服务器,即向每个DNS服务器发送域名解析请求,接收每个DNS服务器发送的IP地址列表,并将每个DNS服务器发送的IP地址列表整合为一个IP地址列表,进行后续过程。
通常,一个域名对应的IP地址较多,所以DNS服务器根据域名确定出多个IP地址后,可以从这多个IP地址中筛选部分IP地址,将筛选出的IP地址发送给手机300。比如,DNS服务器可以记录每个IP地址对应的服务器节点当前的访问量,从多个服务器节点中选择当前访问量较少的服务器节点,并将选择出的服务器节点发送给手机300。
S502:DNS服务器向手机300发送IP地址列表;所述IP地址列表中包括一个或多个IP地址,所述一个或多个IP地址是DNS服务器根据所述域名确定出的与所述域名对应的IP地址;相应的,手机300接收DNS服务器发送的IP地址列表。
示例性的,表1示出了一种可能的IP地址列表(表1只是举例,并不是对IP地址列表的限定)。
表1
服务器节点 |
IP地址 |
域名 |
服务器节点1 |
114.115.190.71 |
baidu.com |
服务器节点2 |
114.171.121.50 |
baidu.com |
服务器节点3 |
114.129.133.20 |
baidu.com |
实际上,DNS服务器向手机300发送的IP地址时可以不是以表格的形式发送,而是以其它方式发送,比如,DNS服务器将各个IP地址打包发送给手机300,对此本申请实施例不作限定。
S503:手机300在第一时刻t1向第一服务器节点发送第一连接请求,所述第一连接请求用于请求与所述第一服务器节点建立连接,所述第一服务器节点是所述IP地址列表中的一个IP地址对应的服务器节点。
以表1为例,且以第一服务器节点是表1中的服务器节点1为例。通常,手机300与第一服务器节点建立连接,可以通过三次握手实现。具体过程如下:
(1)第一次握手:手机300向第一服务器节点发送第一握手请求,所述第一握手请求中携带标志位SYN=1,初始序号seq=x。其中,标志位SYN设置为1,用于指示手机300进入SYN-sent状态。序号seq=x是手机300随机生成的,在后续握手过程中使用。
(2)第二次握手:第一服务器节点接收手机300发送的第一握手请求之后,从第一握手请求中的标志位SYN=1得知手机300请求建立连接。若第一服务器节点同意建立连接,则向手机300发送ACK信息(为了方便描述,下文中将该ACK信息称为第二次握手请求),在ACK消息中标志位SYN=1,确认号ack=x+1,随机产生一个序号seq=y。其中,标志位SYN=1用于指示第一服务器节点进入SYN-received状态,确认号是第一服务器节点根据第一握手请求中的seq=x生成的,第一服务器节点随机产生一个值seq=y,在后续握手过程中使用。
(3)第三次握手,手机300接收到第一服务器节点发送的ACK信息(也即第二握手请求)之后,向第一服务器节点发送确认信息(为了方便描述,下文中将该确认信息称为第三次握手请求),所述确认信息中包括确认号ack=y+1,序号seq=x+1,手机300进入established(已建立连接)状态。当第一服务器节点接收到确认信息后,也进入established(已建立连接)状态。
(1)-(3)步骤完成后,即手机300和第一服务器节点之间建立连接。由此可见,手机300与第一服务器节点建立连接的过程中,手机300向第一服务器节点发送过两次信息,即第一次握手请求和第三次握手请求。
因此,在本申请实施例中,S503中手机在第一时刻向第一服务器节点发送的第一连接请求可以是第一次握手请求。如果第一连接请求是第一次握手请求,那么第一服务器节点反馈的响应信息可以是针对第一次握手请求的响应信息,即在第二次握手过程中,第一服务器节点向手机300发送的ACK信息(即第二次握手请求)。这种情况下,手机300接收到第一服务器节点发送的响应信息之后,还可以向第一服务器节点发送第三次握手请求,以完成手机300与第一服务器节点建立连接的过程,然后手机300向第一服务器节点发送网络资源请求,以请求网络资源。
S504:若手机300在第一预设时长T内未接收到第一服务器节点反馈的响应信息,手机100在第二时刻(第t1+T时刻)向第二服务器节点发送第二连接请求;所述第二服务器节点是所述IP地址列表中的其它IP地址对应的服务器节点。
以表1为例,若第一服务器节点是服务器节点1,则第二服务器节点可以是服务器节点2或者服务器节点3。
在本申请实施例中,手机300中设置第一预设时长T。所述第一预设时长T的具体取值,本申请不作限定。
若手机100在第一预设时长T内接收到第一服务器节点反馈的响应信息,则手机100与第一服务器节点建立连接,向第一服务器节点请求网络资源,在第二时刻不向第二服务节点发送第二连接请求。
S505:若手机300在第二时刻之后的第一预设时间T内,先接收到第一服务器节点发送的响应信息,手机300与第一服务器节点建立连接。
需要说明的是,如前述内容可知,第一连接请求可以是第一次握手请求。因此,第一服务器节点反馈的响应信息可以是针对第一次握手请求的响应信息,即在第二次握手过程中,第一服务器节点向手机300发送的ACK信息(即第二次握手请求)。这种情况下,手机300接收到第一服务器节点发送的响应信息之后,还可以向第一服务器节点发送第三次握手请求,以完成手机300与第一服务器节点建立连接的过程,然后手机300向第一服务器节点发送网络资源请求,以请求网络资源。
S506:手机300将网络资源请求发送给第一服务器节点,所述网络资源请求用于请求网络资源。
S507:手机300接收第一服务器节点返回的网络资源。
以百度为例,百度可以在部署的每个服务器节点中存储网络资源,或者可以将网络资源存储在云存储服务器。因此,当第一服务器节点接收到手机300发送的网络资源请求后,若该第一服务器节点中存储有所述网络资源请求所请求的网络资源,则将所述网络资源发送给手机300。若第一服务器节点中未存储所述网络资源请求所请求的网络资源,则第一服务器节点可以从云存储服务器中获取所述网络资源。第一服务器节点获取到所述网络资源后,将所述网络资源发送给手机300。
通过以上描述可知,在本申请实施例中,如果IP地址列表中IP地址较多(即服务器节点较多),手机300可以在第一时刻向第一服务器节点发送第一连接请求,如果在第一预设时长T内收到第一服务器节点反馈的响应信息,则与第一服务器节点请求建立连接请求网络资源,不再向其它服务器节点发送连接请求。如果在第一时刻后的第一预设时长T内未收到第一服务器节点反馈的响应信息,在第一预设时长到达时,即第二时刻向第二服务器节点发送第二连接请求。如果在第二时刻之后的第一预设时长T内收到第一服务器节点或第二服务器节点反馈的响应信息,则与先收到的响应信息对应的服务器节点建立连接请求网络资源,不再向其它服务器节点发送连接请求。如果在第二时刻之后第一预设时长内未收到第一服务器节点或第二服务器节点反馈的响应信息,则在第二时刻之后第一预设时长到达时,即第三时刻向第三服务器节点发送第三连接请求,以此类推。如果手机300已经向每个服务器节点都发送过一次连接请求,但是未收到任何一个服务器节点反馈的响应信息,手机300可以继续向第一服务器节点发送连接请求,即重新执行S503。或者,手机100可以重新执行S501,并告知DNS服务器上一次反馈的IP地址列表中的服务器节点均无法连接,请求DNS服务器重新为手机300发送新的IP地址列表。
通过以上描述可知,本申请实施例的方案中,手机300得到多个IP地址之后,可以不同同时向多个IP地址对应的服务器节点发送连接请求的,而是以一定的间隔向不同的IP地址对应的服务器节点发送连接请求。举例来说,以DNS服务器反馈的IP地址列表中包括3个IP地址为例,如果手机300同时向这3个IP地址对应的服务器节点发送连接请求,对于手机来说,浪费资源。举例来说,手机向一个IP地址对应的服务器节点发送请求时需要创建一个Socket,那么手机同时向3个IP地址对应的服务器节点发送连接请求,就需要同时创建3个Socket。但是本申请实施例中,手机第一时刻先向服务器节点1发送连接请求,即手机先创建一个Socket,若第一预设时长T内未接收到服务器节点1反馈的响应信息,则手机再创建一个Socket,在第二时刻向服务器节点2发送连接请求。在第二时刻之后的第一预设时长内,手机先接收到服务器节点1的反馈信息时,与服务器节点1建立连接。此时,手机可以关闭服务器节点2的Socket。由此可见,手机无需同时创建三个服务器节点各自的Socket,节省资源。而且手机同时向3个IP地址对应的服务器节点发送连接请求,会导致网络负担加重,在短时间占用了较多的网络的资源。而以一定的间隔向不同的IP地址对应的服务器节点发送连接请求,把连接请求发送分散了,不会导致一时间的网络负担加重,而且不一定要和向所有的IP地址对应的服务器节点都发送连接请求,对网络资源消耗少,在不增加并发访问量的同时能够快速地连接最优服务器节点。
下面列举两个示例,介绍图5所示的服务器节点的选择方法。
示例一:
请参见图6所示,为本申请实施例提供的一种路由选择方法的过程示意图。在图6中,以图2所示的应用场景为例,且t1为0,T为100ms为例。
手机300向DNS服务器发送域名解析请求(S601)后,DNS服务器对域名进行解析,得到IP地址列表,并将所述IP地址列表发送给手机300(S602)。手机300在0ms时,向服务器节点1发送第一连接请求(S603)。在达到100ms时,手机300未接收到服务器节点1反馈的响应信息,手机300在100ms向服务器节点2发送第二连接请求(S604)。手机300向服务器节点1和服务器节点2发送连接请求之后100ms之内,手机300先接收到哪一个服务器节点反馈的响应信息,就与哪一个服务器节点建立连接。
请继续参见图6所示,手机300在120ms接收到服务器节点1反馈的响应信息(S605),在120ms之前或同时未接收到服务器节点2反馈的响应信息,即手机300先接收到服务器节点1反馈的响应信息,所以手机300与服务器节点1建立连接。
需要说明的是,手机300接收到服务器节点1反馈的响应信息之后,后续还可能会接收到服务器节点2反馈的响应信息。作为一种示例,如果手机300后续接收到服务器节点2反馈的响应信息,可以不响应或者丢弃服务器节点2的反馈的响应信息。请继续参见图6所示,手机300在130ms接收到服务器节点2反馈的响应信息(S606),由于手机300已经与服务器节点1建立了连接,所以手机300可以不响应或者丢弃服务器节点2反馈的响应信息。示例性的,手机300接收到一个服务器节点反馈的响应信息时,可以判断手机300是否已经与某个服务器节点建立连接,如果是,手机300可以不响应或者丢弃所述一个服务器节点反馈的响应信息。
作为另一种示例,为了节省资源,手机300接收到服务器节点1反馈的响应信息后,可以不接收服务器节点2反馈的响应信息。比如,手机300可以关闭与服务器节点2对应的套接字(socket)。需要说明的是,手机300向服务器节点1发送连接请求时,手机300会创建与服务器节点1之间的socket,以通过该socket向服务器节点1发送连接请求;手机300与服务器节点2发送连接请求也是类似的过程。因此,当手机300接收到服务器节点1反馈的响应信息后,手机300可以关闭与服务器节点2对应的socket,不接收服务器节点2的响应信息,以节省资源。
请继续参见图6,手机300与服务器节点1建立连接之后,手机300可以向服务器节点1请求网络资源(S607)。服务器节点1向手机300反馈网络资源(S608)。
需要说明的是,在示例一中,手机300在0ms向服务器节点1发送连接请求,在120ms接收服务器节点1发送的响应信息,即服务器节点1的响应时间为120ms。手机300在100ms向服务器节点2发送连接请求,在130ms接收到服务器节点2发送的响应信息,即服务器节点2的响应时间为30ms。可见,虽然服务器节点2的响应时间小于服务器节点1的响应时间,但是手机300仍然选择与服务器节点1连接。因为,响应时间在T~2T(100ms~200ms)的服务器节点的网络质量是较好的,所以手机300先接收到服务器节点1反馈的响应信息后,认为服务器节点1的网络质量较好,所以手机300可以直接与服务器节点1建立连接,无需再多等待10ms,接收到服务器节点2反馈的响应信息后,与服务器节点2建立连接,节省10ms的时间(比如,在这10ms内,手机300可以完成向服务器节点1发送网络资源请求的过程)。
在示例一中,由于手机300在120ms已接收到服务器节点1反馈的响应信息,所以手机300无需在200ms向服务器节点3发送第三连接请求(在图中用虚线表示)。若手机300在200ms内未接收到服务器节点1或者服务器节点2反馈的响应信息,则手机300在200ms向服务器节点3发送连接请求。在200ms-300ms内,手机300先接收到哪一个服务器节点反馈的响应信息,就与哪一个服务器节点建立连接。
示例二:
请参见图7所示,为本申请实施例提供的一种服务器节点的选择方法的过程示意图。在图7中,以图2所示的应用场景为例,且t1为0,T为100ms为例。
示例二中,手机300向服务器节点1和服务器节点2发送连接请求的过程(S701-S704),与示例一(S601-S604)类似,为了说明书的简洁在此不多赘述。
若手机300在T~2T内先收到的是服务器节点1反馈的响应信息,手机300可以暂时不与可以服务器节点1建立连接,等待第二预设时长。如图7所示,手机300在120ms接收到服务器节点1反馈的响应信息(S705),手机300可以暂时不与可以服务器节点1建立连接,等待第二预设时长。其中,所述第二预设时长可以小于T。
比如,第二预设时长可以是T-(服务器节点1反馈响应信息的时长-T),手机300在120ms接收到服务器节点1反馈的响应信息时,可以等待80ms的时长。若手机300在200ms之前未接收到服务器节点2反馈的响应信息,则手机300与服务器节点1建立连接。若手机300在200ms之前接收到服务器节点2反馈的响应信息(S706),则手机300与服务器节点2建立连接。这是因为,服务器节点2的响应时间较快(服务器节点1的响应时间是120ms,服务器节点2的响应时间小于100ms)。
再比如,第二预设时长还可以T+服务器节点反馈响应信息的通常用时-服务器节点1反馈响应信息的时长。通常,手机向服务器节点发送连接请求到手机接收到服务器节点反馈的响应信息所需的时长为40ms-50ms,以服务器节点反馈响应信息的通常用时为50ms为例,由于手机300在100ms向服务器节点2发送连接请求,所以手机300在150ms接收到服务器节点2反馈的响应信息的概率较大。所以,手机300在120ms接收到服务器节点1反馈的响应信息时,可以等待30ms,若手机300在150ms之前未接收到服务器节点2反馈的响应信息,那么手机300可以与服务器节点1建立连接,若手机300在30ms内接收到服务器节点2反馈的响应信息,则手机300与服务器节点2建立连接(因为,服务器节点2比服务器节点1的响应快,服务器节点1的响应时间是120ms,服务器节点2的响应时间是50ms)。
若手机300在T~2T内先收到的是服务器节点2反馈的响应请求,手机300可以与服务器节点2建立连接,无需等待第二预设时长。因为,手机300先向服务器节点1发送连接请求,后向服务器节点2发送连接请求,所以手机300在T~2T内先接收到服务器节点2反馈的响应信息时,即服务器节点2的响应较快,手机300可以直接与服务器2建立连接。
示例三:
请参见图8所示,为本申请实施例提供的一种路由选择方法的过程示意图。在图8中,以图2所示的应用场景为例,且t1为0,T为100ms为例。
手机300向DNS服务器发送域名解析请求(S801)后,DNS服务器对域名进行解析,得到IP地址列表,并将所述IP地址列表发送给手机300(S802)。手机300在0ms时,向服务器节点1发送第一连接请求(S803)。在达到100ms时,手机300未接收到服务器节点1反馈的响应信息,手机300在100ms向服务器节点2发送第二连接请求(S804)。
手机300在150ms同时接收到了服务器节点1和服务器节点2反馈的响应信息(S805)。下面介绍手机300同时接收到两个服务器节点反馈的响应信息时,手机300的处理方式。
第一种可能的实现方式为,手机300接收到服务器节点1和服务器节点2反馈的响应信息后,可以先处理其中一个响应信息(比如,手机30可以随机选择一个响应信息处理)。如果手机300先处理服务器节点1反馈的响应信息,那么手机300可以直接与服务器节点1建立连接。此时,手机300可以无需处理服务器节点2反馈的响应信息,或者可以丢弃服务器节点2反馈的响应信息。
在这种方式中,手机300同时接收到两个响应信息时,先处理哪个响应信息,便于该响应信息对应的服务器节点建立连接。这是因为,如前述内容可知,响应时间在T~2T(100ms~200ms)的服务器节点的网络质量是较好的,所以手机300同时接收到服务器节点1和服务器节点2反馈的响应信息后,认为服务器节点1和服务器节点2的网络质量均较好。因此,手机300先处理哪一个服务器节点反馈的响应信息,就与哪一个服务器节点建立连接。
第二种可能的实现方式为,手机300同时接收到两个响应信息后,可以先判断两个响应信息分别是哪个服务器节点发送的,手机300可以选择响应时间较短的一个服务器节点,并与该服务器节点建立连接。
举例来说,手机300可以记录向服务器节点1发送第一连接请求的第一时刻,并记录接收到服务器节点1发送的响应信息的第二时刻,所述第一时刻和第二时刻之间的时间差即服务器节点1的响应时间,服务器节点2的响应时间也是类似的方式,不多赘述。手机300接收到两个响应信息,从两个响应信息中携带的服务器节点的标识,判断两个响应信息分别是哪个服务器节点发送的。由于服务器节点2的响应时间(50ms)小于服务器节点1的响应时间(150ms),所以手机300与服务器节点2建立连接。此时,手机300可以不处理或者丢弃服务器节点1反馈的响应信息。
第三种可能的实现方式为,手机300同时接收到两个响应信息后,可以先判断两个响应信息分别对应哪个服务器节点。手机300先向哪个服务器节点发送连接请求,就和哪一个服务器节点建立连接。
举例来说,手机300可以记录向服务器节点1和服务器节点2发送连接请求的时间,或者先后顺序。比如图8中,手机300先向服务器节点1发送的连接请求,后向服务器节点2发送的连接请求。因此,所述手机300接收到两个响应信息后,可以和服务器节点1建立连接。此时,手机300可以不处理或者丢弃服务器节点2反馈的响应信息。
以上几种实现方式只是举例,在实际应用中还可以有其它实现方式,本申请实施例对比不作限定。
在本申请实施例中,手机300与IP地址列表中的第一服务器节点建立连接之后,第一服务器节点也能发生故障,以图7为例,当手机300与服务器节点1建立连接后,服务器节点1可能出现故障,导致手机100向服务器节点1网络资源请求之后,迟迟无法接收到服务器节点1反馈的网络资源。因此,下面介绍服务器节点1故障之后,手机300的处理方式。
第一种可能的实现方式为,手机300可以记录接收到每个服务器节点的响应时间,当第一服务器节点故障之后,手机300可以根据记录的每个服务器节点的响应时间的长短,重新确定第二服务器节点,与所述第二服务器节点建立连接。以图7为例,服务器节点1的响应时间为120ms,服务器节点2的响应时间为30ms。当手机300与服务器节点1建立连接后,服务器节点1故障时,手机300可以与服务器节点2建立连接,将网络资源请求发送给服务器节点2,通过这种方式降低手机300获取网络资源的时延。
第二种可能的实现方式为,当手机300向服务器节点1连接后,若服务器节点1故障,手机300也可以再次执行一遍图5所示的流程。由于服务器节点1故障,所以手机300在执行图5所示的流程时,可以无需向服务器节点1发送第一连接请求,直接向服务器节点2发送第二连接请求,T时长内未收到服务节点2反馈的响应信息,则向服务节点3发送第三连接请求,从服务器节点2和服务器节点3中选择一个服务器节点。
在图5-图8所示的实施例中,手机100是以一定的时间间隔向服务器节点1-3发送连接请求的,实际上,手机300还可以同时向服务器节点1-3发送连接请求。请参见图9所示,为本申请实施例提供的另一种服务器节点的选择方法的流程示意图,在该方法中,手机300同时向服务器节点1-3发送连接请求(S903),手机300先接收到服务器节点1反馈的响应信息(S904),所以手机300与服务器节点1建立连接。
需要说明的是,图9所示的实施例与图5-图8所示的实施例中的各种实施方式可以组合,以实现不同的技术效果。比如,图9所示的实施例中,若手机300同时接收到服务器节点1-3反馈的响应信息时,可以按照图7所示实施例中的处理方式处理。
在本申请实施例中,手机300选择第一服务器节点建立连接,并向第一服务器节点请求网络资源后,可以将URL中的域名和第一服务器节点的IP地址存储一段时间。在这段时间内,若手机300再次发起另一个URL,若该URL中携带的域名和存储的所述域名相同,且手机300再次发起另一个URL的时间未超过所述一段时间,则手机300无需执行图5所示的流程,直接向第一服务器节点发送所述另一个URL对应的网络资源请求,用以请求网络资源。若超过所述一段时间,手机300可以重新执行图5所示的流程。此时,手机300可以将域名和第一服务器节点的IP地址删除。手机300重新执行图5所示的流程,与某个服务器节点建立连接之后,重新将所述域名和该服务器节点的IP地址存储一段时间。
其中,域名和第一服务器节点的IP地址的存储时间,本领域技术人员可以根据实际情况而定,比如,10分钟。
下面通过举例介绍采用本申请实施例提供的服务器节点选择方法实现的技术效果。
图10示出了客户端和无故障的服务器节点之间三次握手的测试过程示意图。其中,客户端的IP地址是100.65.147.165,无故障服务器节点的IP地址是114.115.190.71。其中,第一行为第一次握手的过程,第二行是第二次握手过程,第三行是第三次握手过程。其中,第一列表示时间,第二列表示TCP协议,第三列表示发送端,第四列表示接收端。如图8所示,在第一行中,在4.331427s时,客户端(发送端)向无故障服务器节点(接收端)发送第一次握手请求。在第二行中,在4.375664s时,无故障服务器节点(发送端)向客户端(接收端)发送的响应信息(即第二次握手请求)。在第三行中,在4.375785s时,客户端(发送端)向无故障服务器节点(接收端)发送的第三次握手请求。到此为止,客户端与该无故障服务器节点建立连接。以图5所示的第一连接请求是第一次握手请求为例,即手机300从发送第一次握手请求到接收到第二次握手请求的时间为,4.375664-4.331427=44ms。由此可见,手机300向服务器节点1发送连接请求到手机300接收服务器节点反馈的响应信息所消耗的时间在40ms-50ms之内。
也就是说,如果服务器节点1是无故障的服务器节点,手机300应该会在40ms-50ms内接收到服务器节点1反馈的响应信息。前述的示例中(6A-6C、7)均是以T为100ms为例。所以,手机300在100ms内接收不到服务器节点1反馈的响应信息的概率较小。假设该概率为10%,即手机300有10%的概率会向服务器节点2发送第二连接请求。对于服务器节点2来说,若服务器节点2无故障,那么手机300在100ms内接收不到服务器节点2反馈的响应信息的概率也为10%,也即手机300只有10%*10%=1%的概率向服务器节点3发送第三连接请求。如果服务器节点较多,即按照该规律以此类推。
由此可见,客户端尝试新的服务器节点的概率是逐渐降低的,即客户端尝试多个服务器节点后才能找到合适的服务器节点的可能性较小。而且,客户端尝试第一个服务器节点失败后,尝试第二个服务器节点的时间差是100ms,时间较短,用户感知不明显,即在用户无感知的情况下,手机100已经尝试与第二个服务器节点建立连接,有助于提高用户体验。
本申请的各个实施方式可以任意进行组合,以实现不同的技术效果。
上述本申请提供的实施例中,从客户端作为执行主体的角度对本申请实施例提供的方法进行了介绍。为了实现上述本申请实施例提供的方法中的各功能,客户端可以包括硬件结构和/或软件模块,以硬件结构、软件模块、或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。
基于相同的构思,图11所示为本申请提供的一种终端设备1100。如图11所示,该终端1100可以包括:发送器1101、接收器1102、处理器1103;其中,发送器1101、接收器1102、处理器1103可以通过一个或多个通信总线连接。当然,在实际运用中,发送器1101、接收器1102、处理器1103可以不是总线结构,而可以是其它结构,例如星型结构,本申请不作具体限定。
其中,发送器1101可以用于执行图5所示的实施例中的S501、S503、S504、S503、S506,和/或用于支持本文所描述的技术的其它过程;或者,发送器1101可以用于执行图6所示的实施例中的S601、S603、S604、S607,和/或用于支持本文所描述的技术的其它过程;发送器1101可以用于执行图7所示的实施例中的S701、S703、S704、S707,和/或用于支持本文所描述的技术的其它过程;或者,发送器1101可以用于执行图8所示的实施例中的S801、S803、S804,S806,和/或用于支持本文所描述的技术的其它过程;或者,发送器1101可以用于执行图9所示的实施例中的S901、S903、S906,和/或用于支持本文所描述的技术的其它过程。
其中,接收器1102用于执行图5所示实施例中的S502、S505、S507,和/或用于支持本文所描述的技术的其它过程;或者,接收器1102用于执行图6所示实施例中的S602、S605、S606,S608,和/或用于支持本文所描述的技术的其它过程;或者,接收器1102用于执行图7所示实施例中的S702、S705、S706,S708,和/或用于支持本文所描述的技术的其它过程;或者,接收器1102用于执行图8所示实施例中的S802、S805、S807,和/或用于支持本文所描述的技术的其它过程;或者,接收器1102用于执行图9所示实施例中的S902、S904、S905,S907,和/或用于支持本文所描述的技术的其它过程。
处理器1103用于触发发送连接请求,根据响应信息选择服务器节点以建立连接获取网络资源。
基于相同的构思,图12所示为本申请提供的一种终端设备1200。如图9所示,该终端1200可以包括:发送单元1201、处理单元1203,接收单元1202。其中,处理单元1203可以是图4中的OKhttp,发送单元1201和接收单元1202可以是Netd或者Libc。
其中,发送单元1201可以用于执行图5所示的实施例中的S501、S503、S504、S503、S506,和/或用于支持本文所描述的技术的其它过程;或者,发送单元1201可以用于执行图6所示的实施例中的S601、S603、S604、S607,和/或用于支持本文所描述的技术的其它过程;发送单元1201可以用于执行图7所示的实施例中的S701、S703、S704、S707,和/或用于支持本文所描述的技术的其它过程;或者,发送单元1201可以用于执行图8所示的实施例中的S801、S803、S804,S806,和/或用于支持本文所描述的技术的其它过程;或者,发送单元1201可以用于执行图9所示的实施例中的S901、S903、S906,和/或用于支持本文所描述的技术的其它过程。
其中,接收单元1202用于执行图5所示实施例中的S502、S505、S507,和/或用于支持本文所描述的技术的其它过程;或者,接收单元1202用于执行图6所示实施例中的S602、S605、S606,S608,和/或用于支持本文所描述的技术的其它过程;或者,接收单元1202用于执行图7所示实施例中的S702、S705、S706,S708,和/或用于支持本文所描述的技术的其它过程;或者,接收单元1202用于执行图8所示实施例中的S802、S805、S807,和/或用于支持本文所描述的技术的其它过程;或者,接收单元1202用于执行图9所示实施例中的S902、S904、S905,S907,和/或用于支持本文所描述的技术的其它过程。
处理单元1203用于触发发送连接请求,根据响应信息选择服务器节点以建立连接获取网络资源。
基于相同的构思,图13所示为本申请提供的一种终端设备1300。如图13所示,本申请另外一些实施例公开了一种终端设备1300,该终端设备1300可以包括:一个或多个处理器1301、存储器1302,以及一个或多个计算机程序1303,上述各器件可以通过一个或多个通信总线连接。其中,一个或多个计算机程序1303被存储在上述存储器1302中并被配置为被该一个或多个处理器1301执行,该一个或多个计算机程序1303包括指令,上述指令可以使得终端设备执行如图5-图9及相应实施例中的各个步骤。
本申请实施例还提供一种计算机存储介质,该存储介质可以包括存储器,该存储器可存储有程序,该程序被执行时,使得终端设备执行包括如前的图5-图9所示的方法实施例中记载的全部步骤。
本申请实施例还提供一种包含计算机程序产品,当所述计算机程序产品在终端设备上运行时,使得所述终端设备执行包括如前的图5-图9所示的方法实施例中记载的全部步骤。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请实施例可以用硬件实现,或固件实现,或它们的组合方式来实现。当使用软件实现时,可以将上述功能存储在计算机可读介质中或作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是计算机能够存取的任何可用介质。以此为例但不限于:计算机可读介质可以包括RAM、ROM、电可擦可编程只读存储器(electrically erasable programmable read only memory,EEPROM)、只读光盘(compactdisc read-Only memory,CD-ROM)或其他光盘存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质。此外。任何连接可以适当的成为计算机可读介质。例如,如果软件是使用同轴电缆、光纤光缆、双绞线、数字用户线(digital subscriber line,DSL)或者诸如红外线、无线电和微波之类的无线技术从网站、服务器或者其他远程源传输的,那么同轴电缆、光纤光缆、双绞线、DSL或者诸如红外线、无线和微波之类的无线技术包括在所属介质的定影中。如本申请实施例所使用的,盘(disk)和碟(disc)包括压缩光碟(compact disc,CD)、激光碟、光碟、数字通用光碟(digital video disc,DVD)、软盘和蓝光光碟,其中盘通常磁性的复制数据,而碟则用激光来光学的复制数据。上面的组合也应当包括在计算机可读介质的保护范围之内。
总之,以上所述仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡根据本申请的揭露,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。