即时通信系统中的状态呈现方法和状态呈现服务器的制造方法

文档序号:8001632阅读:419来源:国知局
即时通信系统中的状态呈现方法和状态呈现服务器的制造方法
【专利摘要】本发明公开了一种即时通信系统中的状态呈现方法和状态呈现服务器。该方法包括:状态呈现服务器建立接收线程、发送线程、包括至少两个线程的消息处理线程池,以及消息队列;客户端通信线程接收客户端发送的消息,并将所述消息缓存入所述消息队列,所述客户端发送的消息包括:包含用户的状态信息的发布消息;消息处理线程读取消息队列中的消息,并进行处理,获得处理结果,所述处理结果包括用户的状态信息;客户端通信线程将所述处理结果反馈给相应的客户端进行状态呈现。本发明的方案,通过消息队列隔离内部消息处理流程和客户端的交互,使系统更加稳定;采用外围通信、消息队列、内部消息处理的结构化设计,系统设计简单灵活,便于维护和扩充。
【专利说明】即时通信系统中的状态呈现方法和状态呈现服务器

【技术领域】
[0001]本发明涉及计算机网络【技术领域】,特别涉及一种即时通信系统中的状态呈现方法和状态呈现服务器。

【背景技术】
[0002]状态呈现(Presence,简写为PRS)是一种业务能力,它允许用户发布自己的状态信息,允许用户查询另一个用户的状态信息,或者通过成功订阅另一个用户的状态信息而在另一个用户的状态信息改变后向该用户通知已订阅信息的变化。
[0003]状态呈现是一种基础能力,可以为其它业务平台,例如即时消息(InstantMessaging, IM)、一键通业务(Push to Talk Over Cellular, PoC)、多媒体会议等提供状态呈现能力。
[0004]用户的状态信息包括用户的通信意愿、用户的通信手段、用户的场所、其他描述信息等。除此之外还包括一些设备信息,例如用户是否在线等。状态呈现服务器在企业即时通讯中是最复杂、使用最频繁的服务之一,管理离开、忙碌、会议等常用状态,还提供自定义在线状态的功能。
[0005]目前很多用于状态呈现的服务器的实现是比较复杂的,不够灵活,满足不了企业即时通讯的需求,增加了应用的复杂性,影响系统性能,速度和准确性不佳。


【发明内容】

[0006]本发明中提供了一种即时通信系统中的状态呈现方法和状态呈现服务器,以解决上述问题中的至少一部分。
[0007]为达到上述目的本发明的技术方案是这样实现的:
[0008]本发明公开了一种即时通信系统中的状态呈现方法,所述即时通信系统包括:状态呈现服务器和至少一个客户端,所述状态呈现服务器预先建立客户端通信线程、包括至少两个消息处理线程的消息处理线程池,以及消息队列,所述方法包括:
[0009]所述状态呈现服务器调用所述客户端通信线程,接收所述客户端发送的消息,并将所述消息缓存入所述消息队列,所述客户端发送的消息包括:包含用户的状态信息的发布消息;
[0010]所述状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行消息处理,获得处理结果,所述处理结果包括用户的状态信息;
[0011]所述状态呈现服务器调用所述客户端通信线程将所述处理结果反馈给相应的客户端进行状态呈现。
[0012]优选地,所述状态呈现服务器设置有数据库,所述客户端发送的消息还包括:包含用户的注册信息的注册消息和包含订阅关系的订阅消息;
[0013]所述状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行消息处理,获得处理结果,具体包括:
[0014]当所述消息处理线程从消息队列中取出的消息是注册消息时,解析出该注册消息中的注册信息,将注册信息写入所述数据库中,并生成注册响应消息;
[0015]当所述消息处理线程从消息队列中取出的消息是发布消息时,通过读取数据库判断数据库中是否存在对应用户的注册信息,如果存在,则所述消息处理线程解析出该发布消息中的发布信息,将该发布信息写入数据库中,生成发布成功响应消息,如果不存在,则生成拒绝发布响应消息;
[0016]当消息处理线程从消息队列中取出的消息是订阅消息时,解析出该订阅消息中的订阅关系,将该订阅关系写入数据库中,并根据该订阅关系从数据库中读取相应用户的状态信息,生成数据库消息缓存入消息队列中;
[0017]当消息处理线程从消息队列中取出的是数据库消息时,获得相应用户的状态信肩、O
[0018]可选地,所述注册消息、发布消息、订阅消息和数据库消息具有统一的格式。
[0019]可选地,该方法进一步包括:
[0020]所述状态呈现服务器预先建立有定时器线程;
[0021]所述定时器线程定时访问所述数据库,根据所述数据库中的订阅关系读取数据库中的状态发生变化的被订阅用户的状态信息,生成数据库消息缓存入消息队列中;
[0022]当所述消息处理线程从所述消息队列取出的消息是数据库消息时,所述状态呈现服务器获得状态发生变化的被订阅用户的状态信息,并调用客户端通信线程将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
[0023]可选地,所述即时通信系统还包括:群组服务器;
[0024]所述方法进一步包括:
[0025]所述客户端将群组创建信息和群组变化信息发送给所述群组服务器;
[0026]所述群组服务器将群组创建信息和群组变化信息写入所述数据库中;
[0027]所述状态呈现服务器预先建立有定时器线程,定时器线程定时访问所述数据库,根据数据库中的群组创建信息和群组变化信息,读取数据库中的群组用户的状态信息,生成数据库消息缓存入消息队列中;
[0028]当所述消息处理线程从消息队列中取出的消息是数据库消息时,所述状态呈现服务器获得群组信息发生变化的用户的状态信息,并调用客户端通信线程将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
[0029]可选地,所述消息处理线程池中的消息处理线程的个数为状态呈现服务器的CPU数量加I。
[0030]可选地,所述数据库采用异步读写模式。
[0031]本发明还公开了一种即时通信系统中的状态呈现服务器,该状态呈现服务器包括:
[0032]消息队列模块,用于缓存消息并提供消息存取操作;
[0033]客户端通信模块,用于接收客户端发送的消息,并将所述消息缓存入所述消息队列中,所述客户端发送的消息包括:包含用户的状态信息的发布消息;
[0034]消息处理模块,用于读取消息队列中的消息,并进行消息处理,获得处理结果,所述处理结果包括用户的状态信息;
[0035]所述客户端通信模块,还用于将所述处理结果反馈给相应的客户端进行状态呈现。
[0036]可选地,所述状态呈现服务器还包括:数据库,用于保存用户状态信息和用户之间的订阅关系;
[0037]所述客户端发送的消息还包括:包含用户的注册信息的注册消息和包含订阅关系的订阅消息;
[0038]所述消息处理模块,用于在从消息队列中取出的消息是注册消息时,解析出该注册消息中的注册信息,将注册信息写入所述数据库中,并生成注册响应消息;
[0039]所述消息处理模块,还用于在从消息队列中取出的消息是发布消息时,通过查询数据库判断数据库中是否存在对应用户的注册信息,如果存在,则解析出该发布消息中的发布信息,将该发布信息写入数据库中,并生成发布成功响应消息,如果不存在,则生成拒绝发布响应消息;
[0040]所述消息处理模块,还用于在从消息队列中取出的消息是订阅消息时,解析出该订阅消息中的订阅关系,将该订阅关系写入数据库中,并根据该订阅关系从数据库中读取相应用户的状态信息,生成数据库消息缓存入消息队列中;
[0041]所述消息处理模块,还用于当消息处理线程从消息队列中取出的是数据库消息时,获得相应用户的状态信息。
[0042]可选地,该状态呈现服务器进一步包括:
[0043]定时器模块,用于定时访问所述数据库,根据数据库中的订阅关系读取数据库中的状态发生变化的被订阅用户的状态信息,生成数据库消息缓存入消息队列中;
[0044]当消息处理模块从所述消息队列取出的消息是数据库消息时,所述状态呈现服务器获得状态发生变化的被订阅用户的状态信息,并调用客户端通信模块将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
[0045]由上述可见,本发明的这种即时通信系统包括:状态呈现服务器和至少一个客户端;状态呈现服务器预先建立客户端通信线程、包括至少两个消息处理线程的消息处理线程池,以及消息队列;状态呈现服务器调用所述客户端通信线程,接收客户端发送的消息,并将所述消息缓存入所述消息队列,所述客户端发送的消息包括:包含用户的状态信息的发布消息;状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行处理,获得处理结果,所述处理结果包括用户的状态信息;状态呈现服务器调用客户端通信线程将所述处理结果反馈给相应的客户端进行状态呈现的技术方案,通过引入消息队列,隔离了内部消息处理流程和客户端的交互,使系统更加稳定;同时,采用外围通信、消息队列、内部消息处理的结构化设计,使得状态呈现服务器系统设计简单灵活,便于维护和扩充;通过多个消息处理线程协同工作,完成了状态呈现任务,提高了系统性能。

【专利附图】

【附图说明】
[0046]图1是本发明实施例中的一种即时通信系统中的状态呈现方法的流程图;
[0047]图2是本发明实施例中的状态呈现服务器对各种消息的处理示意图;
[0048]图3是本发明实施例中的一种即时通信系统中的状态呈现服务器的结构框图。

【具体实施方式】
[0049]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0050]在本发明的一个实施例中,状态呈现服务器完成的工作包括如下几点中的一种或多种,但又不限于如下的几点(在本实施例中状态呈现服务器是基于SIP协议的):
[0051](I)客户端向状态呈现服务器发送注册消息,其中该注册消息中包含用户的注册信息;状态呈现服务器解析该注册消息,获得用户的注册信息,并将用户的注册信息存入状态呈现服务器的数据库(DB)中;状态呈现服务器返回注册响应消息至客户端,通知客户端,用户已经完成注册。本实施例中的用户的注册信息可以包括:用户名称和密码。
[0052]( 2 )在用户完成注册之后,客户端向状态呈现服务器发送发布消息,其中该发布消息中包含用户的状态信息;状态呈现服务器接收该发布消息后,调用数据库进行查找,如果状态呈现服务器的数据库中没有此用户的注册信息(如用户名称没有注册),则拒绝客户端的发布请求,如果有,则状态呈现服务器解析该发布消息,获得用户的状态信息;状态呈现服务器对获得的状态信息进行内容审核和词语净化处理后将该用户的状态信息存入数据库。所述状态信息中可以包括:在线、离线、忙碌等状态。此外,状态呈现服务器还可以向订阅了该用户状态的订阅者发送该用户的状态消息。
[0053]( 3 )在用户完成注册之后,客户端向状态呈现服务器发送订阅消息,其中所述订阅消息中包含订阅关系;状态呈现服务器接收该订阅消息后,解析该消息,获得订阅关系,并将订阅关系存入数据库;此外,状态呈现服务器还可以向客户端发送订阅的用户的状态信息和/或注册信息。
[0054](4)状态呈现服务器定时从数据库获取群组创建信息、群组变化信息,生成群组相关的用户的状态消息,并将该消息推送给相应的客户端。
[0055]为完成上述工作,本发明中的状态呈现方法如图1所示。
[0056]图1是本发明实施例中的一种即时通信系统中的状态呈现方法的流程图。这里,即时通信系统包括:状态呈现服务器和至少一个客户端,状态呈现服务器预先建立客户端通信线程、包括至少两个消息处理线程的消息处理线程池,以及消息队列。本发明的一个实施例中,所述消息处理线程池中的消息处理线程的个数为状态呈现服务器的CPU数量加1,由于一个CPU同一时间最多只能运行一个线程,创建CPU数量加I个消息处理线程可以最大程度的利用状态服务器的CPU,提高处理效率。
[0057]参见图1,该即时通信系统中的状态呈现方法包括:
[0058]步骤101,状态呈现服务器调用所述客户端通信线程,接收客户端发送的消息,并将所述消息缓存入所述消息队列,所述客户端发送的消息包括:包含用户的状态信息的发布消息。
[0059]步骤102,状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行消息处理,获得处理结果,所述处理结果包括用户的状态信息。
[0060]步骤103,状态呈现服务器调用客户端通信线程将所述处理结果反馈给相应的客户端进行状态呈现。
[0061]在本发明的一个实施例中,发布消息可以包括用户的帐号信息(如用户名或用户标识)、用户的状态,还可以包括与其存在订阅关系的用户的帐号信息、群组标识等。
[0062]在本发明的一个实施例中,所述状态呈现服务器设置有数据库,用于存储用户的帐号信息、用户之间的订阅关系、群组标识、群组成员信息等。状态呈现服务器将帐号信息、用户之间的订阅关系等信息存入数据库中,并在内存中保留一份,既保证安全,又能保证高效性。
[0063]客户端发送的消息还包括:包含用户的注册信息的注册消息和包含订阅关系的订阅消息。所述数据库还用于存储状态呈现相关的信息,如用户状态信息等。消息处理线程池中的消息处理线程根据调度读取消息队列中的消息进行处理时,需要根据消息内容对所述数据库执行读或写操作,获得或更新用户相关的信息。
[0064]优选地,消息处理线程采用异步读或写的模式访问数据库。具体实施时,可以通过改写读写数据库的接口函数,设置回调函数的方式实现异步操作。状态呈现服务器的消息处理线程调用MYSQL的数据库的读写接口函数后,返回调用成功或失败,然后,由回调函数将具体的读写内容通过消息或者共享空间返回给状态呈现服务器。数据库采用异步读写模式,即数据库的读写分离,提高了数据库的访问效率。
[0065]在图1所示方法中,消息处理线程池中包括多个线程,即多个线程根据一定的调度策略处理消息队列中的消息,如消息处理线程池采用优先权调度的方式调度各个消息处理线程,因此提高了消息处理效率。消息处理线程池中各个线程对不同的消息执行不同的处理逻辑。
[0066]图1所示的技术方案中,客户端通信线程可以是一个线程,也可以是多个线程,具体实施时,客户端通信线程还可以分为发送线程和接收线程。另外,本申请的技术方案通过引入消息队列,隔离了内部消息处理流程和客户端的交互,使系统更加稳定;同时,采用外围通信、消息队列、内部消息处理的结构化设计,使得状态呈现服务器系统设计简单灵活,便于系统的维护和扩充。通过多个消息处理线程协同工作,完成了状态呈现任务,提高了系统性能。
[0067]在本发明的一个实施例中,在图1所述方法的步骤101中,客户端发送的消息包括:包含用户的注册信息的注册消息、包含用户的状态信息的发布消息和包含订阅关系的订阅消息时,则步骤102具体包括如下的(a)至(d)步骤,下述的(a)至(d)步骤的执行顺序不受限定。
[0068](a)当消息处理线程从消息队列中取出的消息是注册消息时,解析出该注册消息中的注册信息,将注册信息写入所述数据库中,并生成注册响应消息。注册消息通常包括但不限于:用户名、用户密码等用户信息。
[0069](b)当消息处理线程从消息队列中取出的消息是发布消息时,通过读数据库判断数据库中是否存在对应用户的注册信息;如果存在,则消息处理线程解析出该发布消息中的发布信息,将该发布信息写入数据库中,生成发布成功响应消息,如果不存在,则生成拒绝发布响应消息;此外,消息处理线程还可以从数据中读取该用户的发布信息,生成数据库消息放入消息队列中。发布消息可以包括但不限于:用户名、用户的状态等用户信息。
[0070]( c )当消息处理线程从消息队列中取出的消息是订阅消息时,解析出该订阅消息中的订阅关系,将该订阅关系写入数据库中,并根据该订阅关系从数据库中读取相应用户的状态信息,生成数据库消息缓存入消息队列中。订阅消息可以包括但不限于:用户名、订阅关系,其中,订阅关系包括但不限于主用户名、与该用户(主用户名)存在订阅关系的用户名、群组名、客户端中的一种或几种。生成的数据库消息可以包括用户名、用户状态以及与该用户存在订阅关系(即需要推送状态)的用户名。
[0071](d)当消息处理线程从消息队列中取出的是数据库消息时,获得相应用户的状态信息,再由通信线程将相应用户的状态信息返回给对应的(与该用户存在订阅关系的用户的)客户端,由客户端执行用户状态呈现。消息处理线程生成的响应消息可以直接调用客户端通信线程进行发送,也可以缓存入消息队列,由客户端通信线程定时读取并进行发送,本申请对此不作限定。
[0072]图2是本发明实施例中的状态呈现服务器对各种消息的处理示意图。参见图2,放入消息队列的消息包括用户消息(SIP协议消息)和数据库消息(DB消息)。其中,用户消息包括来自客户端的注册消息、发布消息和订阅消息,数据库消息为处理用户消息时发起查询数据库操作时,数据库反馈的带有查询结果的消息,如包含用户状态(是否注册、在线、离线等)、订阅关系等查询结果的消息。
[0073]消息处理线程池中的消息处理线程从消息队列中取出消息后,判断是用户消息还是数据库消息,如果是用户消息则执行用户消息处理逻辑(如上述的a、b和C),如果是数据库消息则执行数据库消息处理逻辑(如上述的步骤d)。
[0074]在本发明的一个实施例中,消息队列中的各种消息,如所述注册消息、发布消息、订阅消息和数据库消息具有统一的格式,如采用“消息类型+消息长度+字段名+字段内容”的格式。各种消息采用统一的格式方便了线程对各种消息的解析,提高了线程处理消息队列的中的消息的效率。
[0075]在本发明的一个实施例中,状态呈现服务器还预先建立有定时器线程。定时器线程定时访问状态呈现服务器的数据库,根据数据库中的订阅关系读取数据库中的状态发生变化的被订阅用户的状态信息,生成数据库消息,缓存入消息队列中;当消息处理线程从所述消息队列取出的消息是数据库消息时,所述状态呈现服务器获得状态发生变化的被订阅用户的状态信息,并调用客户端通信线程将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。这样能够将状态发生变化的用户的状态及时通知给订阅其状态的用户,在实际应用中可以将定时间隔设置的非常小,这样可以近似达到实时推送状态变化的用户的状态信息。
[0076]在本发明的一个实施例中,即时通信系统还包括:群组服务器。客户端将群组创建信息和群组变化信息发送给群组服务器;群组服务器定期将群组创建信息和群组变化信息写入所述数据库中。
[0077]群组创建信息中包括群组成员信息以及群组的订阅关系信息,群组变化信息中包括群组成员变化信息以及群组的订阅关系变化信息。由于群组服务器直接将群组创建信息和群组变化信息写入数据库中,因此群组服务器和状态呈现服务器不需要直接进行通信。群组服务器通过数据库将群组相关的信息告知状态呈现服务器,大大简化了即时通信系统的内部通信的复杂度。
[0078]状态呈现服务器预先建立有定时器线程,定时器线程定时访问数据库,根据数据库中的群组创建信息和群组变化信息,读取数据库中的群组用户的状态信息,生成数据库消息缓存入消息队列中;当消息处理线程从消息队列中取出的消息是数据库消息时,所述状态呈现服务器获得群组信息发生变化的用户的状态信息,并调用客户端通信线程将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
[0079]基于上述实施例给出本发明中的状态呈现服务器的结构。
[0080]图3是本发明实施例中的一种即时通信系统中的状态呈现服务器的结构框图。如图3所示,该状态呈现服务器包括:消息队列模块301、客户端通信模块302和消息处理模块 303。
[0081]消息队列模块301,用于缓存消息并提供消息存取操作;
[0082]客户端通信模块302,用于接收客户端发送的消息,并将所述消息缓存入所述消息队列中,所述客户端发送的消息包括:包含用户的状态信息的发布消息;
[0083]消息处理模块303,用于读取消息队列中的消息,并进行处理,获得处理结果,所述处理结果包括用户的状态信息;
[0084]客户端通信模块302,还用于将所述处理结果反馈给相应的客户端进行状态呈现。
[0085]在本发明的一个实施例中,状态呈现服务器还包括:数据库304,用于保存用户状态信息和用户之间的订阅关系。状态呈现服务器将用户之间的订阅关系等信息存入数据库304中,并在内存中保留一份,既保证安全,又能保证高效性。所述客户端发送的消息还包括:包含用户的注册信息的注册消息和包含订阅关系的订阅消息;
[0086]消息处理模块303,用于在从消息队列中取出的消息是注册消息时,解析出该注册消息中的注册信息,将注册信息写入所述数据库304中,并生成注册响应消息;
[0087]消息处理模块303,还用于在从消息队列中取出的消息是发布消息时,通过查询数据库304判断数据库304中是否存在对应用户的注册信息,如果存在,则解析出该发布消息中的发布信息,将该发布信息写入数据库304中,并生成发布成功响应消息,如果不存在,则生成拒绝发布响应消息;
[0088]消息处理模块303,还用于在从消息队列中取出的消息是订阅消息时,解析出该订阅消息中的订阅关系,将该订阅关系写入数据库304中,并根据该订阅关系从数据库304中读取相应用户的状态信息,生成数据库消息缓存入消息队列中;
[0089]消息处理模块303,还用于在从消息队列中取出的是数据库消息时,获得相应用户的状态信息。
[0090]消息处理模块303获得的处理结果由客户端通信模块302发送给对应的客户端进行状态呈现。
[0091]图3所示的状态呈现服务器,通过消息队列模块301隔离了消息处理模块303和客户端的交互,使系统更加稳定;同时,采用客户端通信模块302、消息队列模块301和消息处理模块303的结构化设计,使得状态呈现服务器系统设计简单灵活,便于维护和扩充。
[0092]在本发明的一个实施例中,消息队列中的各种消息,如所述注册消息、发布消息、订阅消息和数据库消息具有统一的格式。这方便了消息处理模块对各种消息的解析,提高了消息处理模块处理消息队列的中的消息的效率。
[0093]在本发明的一个实施例中,该状态呈现服务器进一步包括:
[0094]定时器模块305,用于定时访问所述数据库,根据数据库中的订阅关系读取数据库中的状态发生变化的被订阅用户的状态信息,生成数据库消息缓存入消息队列中。当消息处理模块303从所述消息队列取出的消息是数据库消息时,所述状态呈现服务器获得状态发生变化的被订阅用户的状态信息,并调用客户端通信模块302将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。这样能够将状态发生变化的用户的状态及时通知给订阅其状态的用户,在实际应用中可以将定时间隔设置的非常小,这样可以近似达到实时推送状态变化的用户的状态信息。
[0095]在本发明的一个实施例中,数据库304还保存即时通信系统中的群组服务器直接写入的群组创建信息和群组变化信息。定时器模块305,还用于定时访问所述数据库304,根据数据库304中的群组创建信息和群组变化信息,读取数据库中的群组用户的状态信息,生成数据库消息缓存入消息队列中。当消息处理模块303从消息队列中取出的消息是数据库消息时,所述状态呈现服务器获得群组信息发生变化的用户的状态信息,并调用客户端通信模块302将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
[0096]由于群组服务器直接将群组创建信息和群组变化信息写入数据库304中,因此群组服务器和状态呈现服务器不需要直接进行通信。群组服务器通过数据库304将群组相关的信息告知状态呈现服务器,大大简化了即时通信系统的内部通信的复杂度。
[0097]状态呈现服务器的各模块的具体实现可以参见上述方法部分的内容,本申请此处不再赘述。
[0098]综上所述,本发明的这种即时通信系统包括:状态呈现服务器和至少一个客户端;状态呈现服务器预先建立客户端通信线程、包括至少两个消息处理线程的消息处理线程池,以及消息队列;状态呈现服务器调用所述客户端通信线程,接收客户端发送的消息,并将所述消息缓存入所述消息队列,所述客户端发送的消息包括:包含用户的状态信息的发布消息;状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行处理,获得处理结果,所述处理结果包括用户的状态信息;状态呈现服务器调用客户端通信线程将所述处理结果反馈给相应的客户端进行状态呈现的技术方案。本发明通过引入消息队列,隔离了内部消息处理流程和客户端的交互,使系统更加稳定;同时,采用外围通信、消息队列、内部消息处理的结构化设计,使得状态呈现服务器系统设计简单灵活,便于维护和扩充;多个消息处理线程协同工作,完成了状态呈现任务,提高了系统性能。
[0099]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【权利要求】
1.一种即时通信系统中的状态呈现方法,所述即时通信系统包括:状态呈现服务器和至少一个客户端,其特征在于,所述状态呈现服务器预先建立客户端通信线程、包括至少两个消息处理线程的消息处理线程池,以及消息队列,所述方法包括: 所述状态呈现服务器调用所述客户端通信线程,接收所述客户端发送的消息,并将所述消息缓存入所述消息队列,所述客户端发送的消息包括:包含用户的状态信息的发布消息; 所述状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行消息处理,获得处理结果,所述处理结果包括用户的状态信息; 所述状态呈现服务器调用所述客户端通信线程将所述处理结果反馈给相应的客户端进行状态呈现。
2.如权利要求1所述的方法,其特征在于,所述状态呈现服务器设置有数据库,所述客户端发送的消息还包括:包含用户的注册信息的注册消息和包含订阅关系的订阅消息; 所述状态呈现服务器进行消息处理线程池调用,调度所述消息处理线程读取消息队列中的消息,并进行消息处理,获得处理结果,具体包括: 当所述消息处理线程从消息队列中取出的消息是注册消息时,解析出该注册消息中的注册信息,将注册信息写入所述数据库中,并生成注册响应消息; 当所述消息处理线程从消息队列中取出的消息是发布消息时,通过读取数据库判断数据库中是否存在对应用户的注册信息,如果存在,则所述消息处理线程解析出该发布消息中的发布信息,将该发布信息写入数据库中,生成发布成功响应消息,如果不存在,则生成拒绝发布响应消息; 当消息处理线程从消息队列中取出的消息是订阅消息时,解析出该订阅消息中的订阅关系,将该订阅关系写入数据库中,并根据该订阅关系从数据库中读取相应用户的状态信息,生成数据库消息缓存入消息队列中; 当消息处理线程从消息队列中取出的是数据库消息时,获得相应用户的状态信息。
3.如权利要求2所述的方法,其特征在于, 所述注册消息、发布消息、订阅消息和数据库消息具有统一的格式。
4.如权利要求1所述的方法,其特征在于,所述状态呈现服务器设置有数据库,该方法进一步包括: 所述状态呈现服务器预先建立有定时器线程; 所述定时器线程定时访问所述数据库,根据所述数据库中的订阅关系读取数据库中的状态发生变化的被订阅用户的状态信息,生成数据库消息缓存入消息队列中; 当所述消息处理线程从所述消息队列取出的消息是数据库消息时,所述状态呈现服务器获得状态发生变化的被订阅用户的状态信息,并调用客户端通信线程将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
5.如权利要求1所述的方法,其特征在于,所述状态呈现服务器设置有数据库,所述即时通信系统还包括:群组服务器; 所述方法进一步包括: 所述客户端将群组创建信息和群组变化信息发送给所述群组服务器; 所述群组服务器将群组创建信息和群组变化信息写入所述数据库中; 所述状态呈现服务器预先建立有定时器线程,定时器线程定时访问所述数据库,根据数据库中的群组创建信息和群组变化信息,读取数据库中的群组用户的状态信息,生成数据库消息缓存入消息队列中; 当所述消息处理线程从消息队列中取出的消息是数据库消息时,所述状态呈现服务器获得群组信息发生变化的用户的状态信息,并调用客户端通信线程将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
6.如权利要求1至5中任一项所述的方法,其特征在于, 所述消息处理线程池中的消息处理线程的个数为状态呈现服务器的CPU数量加I。
7.如权利要求2至5中任一项所述的方法,其特征在于, 所述数据库采用异步读写模式。
8.—种即时通信系统中的状态呈现服务器,其特征在于,该状态呈现服务器包括: 消息队列模块,用于缓存消息并提供消息存取操作; 客户端通信模块,用于接收客户端发送的消息,并将所述消息缓存入所述消息队列中,所述客户端发送的消息包括:包含用户的状态信息的发布消息; 消息处理模块,用于读取消息队列中的消息,并进行消息处理,获得处理结果,所述处理结果包括用户的状态信息; 所述客户端通信模块,还用于将所述处理结果反馈给相应的客户端进行状态呈现。
9.如权利要求8所述的状态呈现服务器,其特征在于, 所述状态呈现服务器还包括:数据库,用于保存用户的状态信息和用户之间的订阅关系; 所述客户端发送的消息还包括:包含用户的注册信息的注册消息和包含订阅关系的订阅消息; 所述消息处理模块,用于在从消息队列中取出的消息是注册消息时,解析出该注册消息中的注册信息,将注册信息写入所述数据库中,并生成注册响应消息; 所述消息处理模块,还用于在从消息队列中取出的消息是发布消息时,通过查询数据库判断数据库中是否存在对应用户的注册信息,如果存在,则解析出该发布消息中的发布信息,将该发布信息写入数据库中,并生成发布成功响应消息,如果不存在,则生成拒绝发布响应消息; 所述消息处理模块,还用于在从消息队列中取出的消息是订阅消息时,解析出该订阅消息中的订阅关系,将该订阅关系写入数据库中,并根据该订阅关系从数据库中读取相应用户的状态信息,生成数据库消息缓存入消息队列中; 所述消息处理模块,还用于在从消息队列中取出的消息是数据库消息时,获得相应用户的状态信息。
10.如权利要求8所述的状态呈现服务器,其特征在于,该状态呈现服务器进一步包括: 所述状态呈现服务器还包括:数据库,用于保存用户的状态信息和用户之间的订阅关系; 定时器模块,用于定时访问所述数据库,根据数据库中的订阅关系读取数据库中的状态发生变化的被订阅用户的状态信息,生成数据库消息缓存入消息队列中; 当消息处理模块从所述消息队列取出的消息是数据库消息时,所述状态呈现服务器获得状态发生变化的被订阅用户的状态信息,并调用客户端通信模块将所述用户的状态信息发送给与该用户存在订阅关系的其他用户的客户端进行状态呈现。
【文档编号】H04L29/06GK104253808SQ201310270991
【公开日】2014年12月31日 申请日期:2013年6月29日 优先权日:2013年6月29日
【发明者】衣春雷 申请人:北京新媒传信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1