和客户端进行通信的方法以及服务器的制造方法_3

文档序号:9581720阅读:来源:国知局
中的4分钟和6分钟只是示意性的描述,在具体实现时, 只要服务器中的进程扫描在线用户列表的时间间隔大于客户端每次发送请求消息时的时 间间隔即可。
[0054] 通过客户端信息列表中存储的上述数据,一方面,服务器可W在每次收到客户端 发来的请求消息之后,确定出该客户端与服务器之间是否已经建立了长连接,并据此向客 户端返回响应消息,W便客户端及时了解长连接的状态,并在长连接断开后能够及时建立 连接,在此过程中,服务器进一步对客户端信息列表中的数据进行维护,W便于后续处理。 另一方面,在后续执行步骤S150时,服务器可W根据该客户端信息列表,确定与客户端之 间建立的长连接,通过该长连接在服务器和客户端之间传输消息。 阳化5] 在执行步骤S150的过程中,由于服务器在步骤SllO中已经通过请求消息中的应 用标识获知了在发送该请求消息的客户端上正在运行的应用,因此,服务器可W进一步对 该应用标识进行存储,例如,可存储在客户端信息列表中或存储在其他存储区域内,然后, 服务器在后续通过该客户端与服务器之间的长连接通道向该客户端传输消息时,可W有针 对性地传输一些与该客户端上正在运行的应用相关的消息,W实现广告内容或者推广活动 的精准推送。例如,如果客户端上目前正在玩一款大型的网络游戏,就可W向该客户端推送 一些与该网络游戏相关的资讯或广告等。另外,本领域技术人员可W理解的是,步骤Slio 的请求消息中也可W不包含应用标识,同样能够实现服务器与客户端之间的消息传输。请 求消息中包含应用标识只是为了使服务器向客户端推送数据时更有针对性,更贴合用户需 求。
[0056] 通过本发明实施例提供的方法,除了可W由服务器利用长连接通道向客户端精准 推送数据之外,还可W由客户端利用长连接通道与服务器之间同步数据,例如,客户端可 W采用轮询请求的方式来同步服务器端的数据,具体地,客户端可W每隔一定的时间间隔 (如1分钟)向服务器发送同步请求,服务器每次接收到同步请求后将未同步的数据返回给 客户端。为了缩短数据的延迟,可W将客户端发送同步请求的时间间隔设置得尽可能小。
[0057] 由此可见,通过本发明实施例提供的方法,通过客户端发送请求消息,服务器通过 自身维护的客户端信息列表向客户端返回响应消息的方式,可W使客户端及时了解与服务 器之间的长连接的状态,并在长连接断开时及时建立连接。而且,服务器还可W通过该长连 接向客户端传输消息,且可根据客户端正在运行的应用来有针对性的推送数据,因此,更加 符合用户需求。
[0058] 本发明可W特别地应用于基于诸如HTTP之类的无状态通信协议的网络应用场景 中,尤其可W应用于基于web的应用场景中。在基于web的应用场景中,客户端为网络浏览 器,特别是网络浏览器中的网页及其相关javascript脚本,而服务器为处理来自网页的请 求的web服务器。
[0059] 本发明实施例还提供了一种适于和客户端进行通信的服务器。图2示出了包含该 服务器的通信系统的系统结构图。如图2所示,服务器200与多个客户端100相连,且服务 器200进一步包括:通信接口 210、通信控制器220W及存储单元230。
[0060] 通信接口 210接收客户端100发送的请求消息,获取包含在该请求消息中的该客 户端100的客户端标识。
[0061] 通信控制器220根据通信接口 210获取的客户端标识,进一步确定存储单元230 中存储的客户端信息列表中是否存储了与通信接口 210获取到的客户端标识相对应的长 连接通道标识,如果客户端信息列表中存储了与该客户端标识相对应的长连接通道标识, 则控制通信接口 210向客户端100返回指示长连接已建立的第一响应消息。如果客户端信 息列表中未存储与该客户端标识相对应的长连接通道标识,则为客户端100分配一个长连 接通道,将分配的长连接通道的长连接通道标识W及该客户端标识对应存入该客户端信息 列表中,并控制通信接口 210向客户端100返回指示长连接未建立的第二响应消息,其中, 该第二响应消息中包含该长连接通道标识,用于指示客户端100根据该长连接通道标识与 服务器200建立长连接。当客户端100收到该第二响应消息之后,W基于网页的网络游戏 为例来说,可W利用下面的javacript脚本来与服务器200建立长连接:
[0062]
[0063] 从服务器200返回的数据data.comet_url中就存储有长连接通道标识,因此,通 过U8.conn,init('js'),就可W根据长连接通道标识来和服务器200建立长连接。
[0064] 其中,通信控制器220需要与存储单元230配合来维护上述的客户端信息列表,然 后根据该客户端信息列表来判断发送请求消息的客户端与服务器之间是否已经建立了长 连接,并根据判断结果执行相应的处理。 阳0化]具体地,每当通信接口210接收到一个客户端100发送的一次请求消息后,通信控 制器220先要查找存储单元230的客户端信息列表中是否存储有该客户端100的客户端标 识,如果没有,通信控制器220控制存储单元230在该客户端信息列表中添加该客户端的客 户端标识,在该客户端信息列表中存储了该客户端的客户端标识的前提下,进一步判断该 客户端信息列表中是否存储了与该客户端标识相对应的长连接通道标识,如果存储了与该 客户端标识相对应的长连接通道标识,说明该客户端与服务器之间已经建立了长连接,因 此,直接向客户端返回用于指示长连接已经建立的第一响应消息。如果该客户端信息列表 中还没有存储与该客户端标识相对应的长连接通道标识,说明该客户端与服务器之间没有 建立长连接,因此,通信控制器220需要先为该客户端分配一个长连接通道,并控制存储单 元230将分配的长连接通道的长连接通道标识W及该客户端标识对应存储在该客户端信 息列表中。
[0066] 其中,客户端信息列表中的长连接通道标识是通过如下方式存储的:每次新添加 一个客户端标识时,通信控制器220为该新添加的客户端标识分配一个长连接通道标识, 并将该长连接通道标识与该客户端标识对应存储在客户端信息列表中,因此,当客户端信 息列表中没有存储请求消息中的客户端标识时,必然也没有存储与该客户端标识相对应的 长连接通道标识,运时,通信控制器220需要为该客户端分配一个长连接通道,并控制通信 接口 210向客户端返回包含该长连接通道的长连接通道标识的第二响应消息,W指示客户 端建立长连接。通信控制器220为客户端分配长连接通道之后,会将该长连接通道及其通 道标识添加到客户端信息列表中,因此,当在后续过程中通信接口 210再次接收到该客户 端发送的请求消息时,通信控制器220则会发现在客户端信息列表中已经存储了该客户端 的长连接通道标识,运时,通信控制器220无需修改客户端信息列表,只需控制通信接口 210向客户端返回用于指示长连接已建立的第一响应消息即可。
[0067] 下面详细介绍一下存储单元230的客户端信息列表中存储的数据内容及存储格 式。客户端信息列表中需要存储=类数据。为了提高运行效率,运=类数据可W采用redis 存储系统进行存储,redis存储系统采用内存式存储,因此运行效率较高。
[0068] 第一类数据是在线用户列表,在该类数据中主要存储当前在线的客户端的客户端 标识,可W采用Zset数据结构存储。Zset是一种带权重的set结构,可W将叩沈RIONLI肥" 作为set的键,客户端标识(即用户id)作为值,用户上线时间作为权重,存储时间权重的 目的主要是为了方便删除已下线的用户,从而尽量保证在线用户列表中存储的用户都为在 线用户,具体删除的方法将在后面介绍。为了对第一类数据进行维护,每当通信接口 210接 收到客户端发送的请求消息后,通信控制器220都要判断在客户端信息列表中是否存储有 该请求消息中包含的客户端标识(即用户id),当不包含该客户端标识时,在客户端信息列 表的在线用户列表中增加一项存储条目,在该项存储条目中Wzset数据结构存储该客户 端标识W及该请求消息的发送时间,具体地,将"US邸IONLI肥"作为运一存储条目的键,该 客户端标识作为运一条目的值,并通过请求消息的发送时间来计算用户的上线时间,并将 计算结果作为权重,由于客户端信息列表原本不包含该客户端标识,所W运是服务器第一 次接收到该客户端发送的请求消息,因此,存储单元230记录下该次请求消息的时间,并计 算用户上线时间为0。该客户端上线后会每隔4分钟发送一次请求消息,因此,当服务器W 后再接收到该客户端发来的请求消息时,会发现客户端信息列表中已经存储了该客户端标 识的存储条目,因此,只需根据本次接收到请求消息的时间,对该存储条目中的权重值进行 更新即可,具体更新时,假设服务器是第N次接收到该客户端发送的请求消息,则计算第N 次接收到请求消息的时间与第一次接收到请求消息的时间间隔作为该用户的上线时间。
[0069] 第二类数据是每个在线用户对应的长连接通道,在该类数据中主要存储当前在线 用户使用的客户端与服务器通信时所采用的长连接通道,也可W采用zset数据结构存储。 可从隐"0^順61_1^51'|{1山"作为86*的键,"{1山|{时间戳}"作为值,另外,还可从隐用 户上线时间作为权重。其中,{i山表示用户id,即第一类数据中的客户端标识,通过客户端 标识将第一类数据与第二类数据对应地关联起来。其中,第二类数据中的每个长连接通道 是由服务器为对应的客户端分配的。也就是说,每当通
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1