一种即时通信的方法、系统及服务器与流程

文档序号:12701900阅读:170来源:国知局
一种即时通信的方法、系统及服务器与流程
本发明涉及即时通信技术,更具体地说,涉及一种即时通信的方法、系统及服务器。

背景技术:
随着信息技术的迅猛的发展,SNS(SocialNetworkingService,社会化网络服务)产品大为流行,聊天交友类系统则是此类产品中不可或缺的基本功能组件。鉴于现有的SNS产品多是基于浏览器的,因此,需要与之配合的基于浏览器的即时通信产品。然而,当前绝大多数即时通信产品(如QQ、MSN等)却都是基于桌面的。鉴于HTTP协议自身的局限性,如非连接和无状态特性等等,基于浏览器的即时通信产品的状态管理比较困难。传统网页即时通信系统信息交互模式,现有技术中一般都采用C/S(client/server,客户端/服务器)架构形式,其中即时通信客户端软件安装于用户终端上,用于提供数据存储、消息转发、状态保存等功能,而设置于网络侧的服务器用于提供输入输出、信息显示、界面操作等功能。通过客户端发出请求、服务器端响应的方式工作,这种方式并不能满足很多现实应用的需求。即时通信系统需要服务器能实时地将更新的信息传送到客户端,而无需客户端发出请求。现有技术中,当前网页即时通信系统的信息获取有以下两种模式:第一、浏览器每隔一定时间请求服务器来获取最新消息,这种模式称之为轮询;第二、服务器维持与浏览器长时间的连接来传递数据,长连接的技术称之为Comet连接。在上述第一种模式中,客户端以用户可定义的时间间隔去检查服务器上的最新数据,如此很容易就能发现轮询方式的主要缺点是产生了大量的传输浪费。因为可能大部分向服务器的请求是无效的,也就是说,客户端等待发生的事件没有发生,如果有大量的客户端的话,这种网络传输的浪费是非常严重的。特别是对于服务器端很久才更新的应用程序来讲,比如邮件程序,这种浪费就更是巨大了。并且,对服务器端处理请求的能力也相应提高了要求。如果很长时间才向服务器端发送一次请求的话,客户端就不能的得到及时的响应。因此,这种方式要么导致较高的网络流量(检查频率过高),要么导致错过更新的数据(检查频率过低)。另一方面,如果使用Comet技术的话,虽然不存在轮询模式的问题,但是,要求客户端和服务器端必须保持一个长连接,一般情况下,服务器端每一个接口都会独占一个线程,这样就会使得服务器端有很多线程同时存在,在客户端非常多的情况下,也会对服务器端的处理能力带来很大的挑战。

技术实现要素:
本发明实施例提供一种即时通信的方法、系统及服务器,解决了在长连接模式中,对于客户端非常多的情况下,服务器端有大量线程同时存在时影响服务器端处理能力的问题。本发明实施例一方面提供一种即时通信的方法,包括以下步骤:根据接收到的客户端发送的建立长连接请求,建立与当前客户端的长连接,并分配给所述当前客户端对应的线程;所述服务器端判断是否存在所述当前客户端的即时信息;所述服务器端判断是否存在所述当前客户端的即时信息,如果不存在,则将当前客户端建立的长连接挂起,并将发送建立长连接请求的下一客户端作为当前客户端;如果存在,则发送即时信息给对应客户端;其中,所述当前客户端和所述下一客户端使用同一线程。优选的,所述将当前客户端建立的长连接挂起,并将发送建立长连接请求的下一客户端作为当前客户端之后,该方法还包括:当检测到包含有挂起的客户端的即时消息时,唤醒对应客户端的长连接;将检测到的即时消息发送给对应的所述唤醒长连接的客户端。优选的,所述将检测到的即时消息发送给对应的所述唤醒长连接的客户端之后,该方法还包括:再挂起对应客户端的长连接。优选的,当检测到包含有挂起的客户端的即时消息时,唤醒对应客户端的长连接之前,该方法还包括:获取即时消息,所述即时消息中携带有客户端信息以及对应的当前位置对应的IP地址;将获取的即时消息保存到缓存中,并按照接收客户端发送的建立长连接请求的先后顺序,依次唤醒对应客户端的长连接。优选的,所述当检测到包含有挂起的客户端的即时消息时,唤醒对应客户端的长连接,具体为:解析获取的即时消息中包含的所述客户端当前位置对应的IP地址;根据解析的IP地址,唤醒对应客户端的长连接。优选的,采用轮询的模式获取即时信息。本发明实施例另一方面还提供一种即时通信系统,包括:客户端与服务器端;所述客户端,用于向服务器端发送建立长连接请求,以及接收服务器端发送的即时消息;所述服务器端,用于接收所述客户端发送的建立长连接请求,根据所述请求建立对应的长连接,并分配给所述当前客户端对应的线程;还用于判断是否存在当前建立长连接的客户端的即时信息,不存在时,将当前客户端建立的长连接挂起,将发送建立长连接请求的下一客户端作为当前客户端;存在时,发送即时信息给对应客户端;其中,所述当前客户端和所述下一客户端使用同一线程。优选的,该系统还包括:发送即时信息的客户端,所述服务器,采用轮询的模式获取所述发送即时信息的客户端的即时信息;并将获取的即时信息发送给接收即时信息的客户端。优选的,所述服务器,还用于当检测到存在挂起的客户端的即时消息时,唤醒对应客户端的长连接;以及将检测到的即时消息发送给对应的所述唤醒长连接的客户端。优选的,所述服务器,还用于将检测到的即时消息发送给对应的所述唤醒长连接的客户端之后,再挂起对应客户端的长连接。本发明实施例另一方面还提供一种服务器,该服务器包括:接收单元,用于接收客户端发送的建立长连接请求;建立单元,用于建立与当前客户端的长连接;分配单元,用于分配给所述当前客户端对应的线程;处理单元,用于当判断出不存在所述当前客户端的即时信息时,将当前客户端建立的长连接挂起,并将发送建立长连接请求的下一客户端作为当前客户端;发送单元,用于当判断出存在所述当前客户端的即时信息时,发送即时信息给对应客户端;其中,所述当前客户端和所述下一客户端使用同一线程。优选的,所述处理单元包括:监听模块与唤醒模块;所述监听模块,用于检测接收到的即时消息;所述唤醒模块,用于当检测到包含有挂起的客户端的即时消息时,唤醒对应客户端的长连接;所述发送单元,还用于将检测到的即时消息发送给对应的所述唤醒长连接的客户端。优选的,所述处理单元,还用于在检测到的即时消息发送给对应的所述唤醒长连接的客户端之后,再挂起对应客户端的长连接。本发明实施例与现有技术相比,具有以下优点:本发明实施例采用长连接的模式,不用间隔一定时间就请求服务器来获取最新消息,因而解决了网络流量较高(检查频率过高),或者产生错过更新的数据的问题。采用本发明的方法,服务器端在与当前客户端建立长连接后,要对当前建立长连接的客户端以此进行判断,判断是否存在所述当前客户端的即时信息,如果判断出不存在当前客户端的即时信息时,将当前客户端建立的长连接挂起,也就是说,先不用对当前建立长连接的客户端进行任何操作,使其处于被挂起状态,然后继续接收下一客户端建立长连接的请求,将发送建立长连接请求的下一客户端作为当前客户端,重复上面的过程,一旦服务器检测到的即时信息中,有对应于被挂起客户端的即时信息,将对应的客户端的长连接执行唤醒操作,并将即时信息发送给对应的客户端。采用本发明的方法,可以解决现有技术中长连接模式的服务器对应每个客户端都要分配一个线程,自身处理能力受到很大影响的问题,使多个客户端共用一个线程,即使有大量的客户端发送请求时,服务器系统的性能也可以处于良好状态。附图说明图1为本发明实施例一方法的流程图;图2为本发明实施例二方法的流程图;图3为本发明具体实施例系统的结构框图;图4为本发明具体实施例一种服务器的结构框图;图5为本发明具体实施例一种服务器中处理单元的结构框图。具体实施方式本发明实施例提供一种即时通信的方法、系统及服务器,解决了在长连接模式中,对于客户端非常多的情况下,服务器端有大量线程同时存在会影响服务器端处理能力的问题。下面结合具体实施方式及附图对本发明进行描述。本发明实施例一方面提供一种即时通信的方法,如图1所示,为本实施例方法的流程图,包括:步骤101:根据接收到的客户端发送的建立长连接请求,建立与当前客户端的长连接,并分配给所述当前客户端对应的线程;其中,所述建立连接请求中至少包含有对应所述客户端标识、以及所述客户端的位置信息;步骤102:所述服务器端判断是否存在所述当前客户端的即时信息,当判断出不存在所述当前客户端的即时信息时,则执行步骤103;当判断出存在所述当前客户端的即时信息时,则执行步骤104;步骤103:将当前客户端建立的长连接挂起,并将发送建立长连接请求的下一客户端作为当前客户端,结束当前处理流程;这里,是使多个客户端共用同一线程进行连接;步骤104:发送即时信息给对应客户端。具体的,当前客户端与服务器建立长连接后,分配一个线程为当前客户端服务,服务器首先要判断是否存在对应该客户端的即时信息,如果存在,则发送给对应的客户端,如果判断出不存在对应该当前客户端的即时信息,则将该客户端建立的长连接挂起,等待处理;这时,接收下一客户端的建立长连接的请求,做同样的处理,并将下一客户端作为当前客户端,使用同一线程;同样的,如果判断出新的当前客户端也没有对应的即时信息存在,则将新的当前客户端的长连接也挂起,等待处理。服务器设有监听单元,可以即时检测获取的即时信息,并通过获取的即时信息确定发送方客户端标识以及对应的当前位置,以及接收即时信息的客户端的标识以及对应的当前位置;接收方的客户端的当前位置可以从发送建立长连接请求中包含的位置信息解析得到,通过解析得到的对应IP地址确定出需要将获取的即时信息发送给哪个客户端,此时查找出要发送即时信息的客户端后,则将对应该客户端的长连接唤醒,并将对应的即时信息发送给被唤醒的客户端。这里,由于被挂起的客户端为多个,一般按照被挂起的先后顺序,返回即时信息。如图2所示,为本发明具体实施例二提供的方法流程图,包括:步骤201:获取多个客户端建立长连接的请求,所述请求中包含有对应客户端当前地址信息;步骤202:与各客户端建立长连接,保持通信状态;步骤203:将建立长连接的客户端信息进行保存;步骤204:将保存的客户端进行分组,并分配到一个线程中;步骤205:判断是否存在当前建立长连接的客户端的即时信息,判断出没有当前建立长连接的客户端的即时信息时,则执行步骤206;判断出有当前建立长连接的客户端的即时信息时,则执行步骤207;步骤206:挂起没有即时信息的客户端的长连接;进一步的,通过数据接口获取对应客户端的即时信息,并解析对应所述即时信息,获取对应的客户端信息以及对应的当前位置,即:对应的IP地址,将其添加到保存的客户端信息中;步骤207:当服务器判断出存在属于被挂起客户端的即时信息时,唤醒对应的客户端,并发送即时信息。其中,可能判断出同时存在多个被挂起的客户端的即时信息,可以按照被挂起时间的先后顺序进行依次处理。具体的,通过用户登录,使客户端与服务器建立长连接,并保持会话;初始化线程组,并且将保存的客户端分配到一个线程中。如果用户刷新,则释放当前的长连接,替换原有用户的长连接。启动线程,对分配给该线程的用户进行分组,可一次通过多个客户端获取对应客户端的即时信息;将对应客户端的即时信息通过数据接口获取,将获取的即时信息进行解析,然后追加到对应保存的客户端消息中;判断客户端是否有即时消息;如果有,则唤醒对应的长连接;没有,则跳过,继续处理下一个客户端的请求。通过服务器唤醒长连接后会自动调用服务方法,使客户端接收即时消息。将服务器将获取的即时信息发送给客户端之前,要对获取的即时信息进行格式组装,组装格式的时候需要通过客户端发送的请求中包含的该客户端的消息,组装好数据格式后发送到对应的客户端进行显示。客户端收到即时消息后,展现给用户查看,同时再次发起一个新的请求来获取数据,此过程一直保持长连接的通信。如图3所示,为本发明实施例系统的结构框图,其中,即时通信系统包括:客户端31与服务器32端;客户端31,用于向服务器端发送建立长连接请求,以及接收服务器端发送的即时消息;所述建立连接请求中至少包含有对应客户端31标识、以及所述客户端的位置信息;服务器32端,用于接收客户端31发送的建立长连接请求,根据所述请求建立对应的长连接,并判断是否存在当前建立长连接的客户端的即时信息;服务器32端,还用于当判断出不存在所述当前客户端的即时信息时,将当前客户端建立的长连接挂起,将挂起的客户端的信息保存到存储器321上,并将发送建立长连接请求的下一客户端作为当前客户端,使所述当前客户端共用同一线程进行连接;服务器32端,还用于当判断出存在所述当前客户端的即时信息时,发送即时信息给对应客户端。该系统还包括:发送即时信息的客户端33,服务器32端,采用轮询的模式获取发送即时信息的客户端33的即时信息;并将获取的即时信息发送给接收即时信息的客户端31。进一步的,当检测到包含有挂起的客户端的即时消息时,服务器32端,还用于唤醒对应客户端的长连接;以及将检测到的即时消息发送给对应的所述唤醒长连接的客户端。更进一步的,服务器32端,还用于将检测到的即时消息发送给对应的所述唤醒长连接的客户端之后,再挂起对应客户端的长连接。如图4所示,为本发明实施例中一种服务器的结构框图,包括:接收单元41,用于接收客户端发送的建立长连接请求;建立单元42,用于建立与当前客户端的长连接;分配单元43,用于分配给所述当前客户端对应的线程;判断单元44,用于判断是否存在所述当前客户端的即时信息;处理单元45,用于当判断出不存在所述当前客户端的即时信息时,将当前客户端建立的长连接挂起,并将发送建立长连接请求的下一客户端作为当前客户端,使所述当前客户端共用同一线程进行连接;发送单元46,用于当判断出存在所述当前客户端的即时信息时,发送即时信息给对应客户端。如图5所示,为本发明实施例服务器中处理单元的结构框图,其中,处理单元45具体包括:监听模块51与唤醒模块52;监听模块51,用于检测接收到的即时消息;唤醒模块52,用于当检测到包含有挂起的客户端的即时消息时,唤醒对应客户端的长连接;发送单元46,还用于当唤醒对应客户端的长连接后,将检测到的即时消息发送给对应的所述唤醒长连接的客户端。具体的,将检测到的即时信息发送给对应的客户端之前,需要将获得的即时信息进行解析,获取客户端的对应标识以及对应的IP地址,才可以知道需要唤醒哪个客户端,发送给哪个客户端,将解析得到的对应接收即时信息的客户端的对应标识以及对应的IP地址保存到缓存中,用以与建立长连接请求的客户端进行匹配,将匹配一致的客户端作为被唤醒的对象,以便将即时信息发送给对应的客户端。进一步的,当将检测到的即时消息发送给对应的所述唤醒长连接的客户端之后,处理单元45,还用于再挂起对应客户端的长连接。本发明与现有技术相比具有以下优点:本发明实施例采用长连接的模式,不用间隔一定时间请求服务器来获取最新消息,从而解决了导致的网络流量较高(检查频率过高),或者产生错过更新的数据的问题。采用本发明的方法,服务器端在和当前的客户端建立长连接后,要对当前建立长连接的客户端进行以此判断,判断是否存在所述当前客户端的即时信息,如果判断出不存在当前客户端的即时信息时,将当前客户端建立的长连接挂起,也就是先不用对当前建立长连接的客户端进行任何操作,使其处于被挂起状态,然后继续接收下一客户端建立长连接的请求,将发送建立长连接请求的下一客户端作为当前客户端,重复上面的过程,一旦服务器检测到的即时信息中,有对应于被挂起客户端的即时信息,将对应的客户端的长连接执行唤醒操作,并将即时信息发送给对应的客户端。采用本发明的方法,可以解决现有技术中长连接模式的服务器对应每个客户端都要分配一个线程,自身处理能力受到很大影响的问题,使多个客户端共用一个线程,即使有大量的客户端发送请求时,服务器系统的性能也可以处于良好状态。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1