Web即时通讯方法 【技术领域】
本发明涉及互联网Web即时通讯技术。
技术背景
如今绝大多数即时通讯技术都是基于应用程序的,通常使用tcp/ip协议,使用时必须安装相应的应用程序软件,且容易受到防火墙、操作系统等限制。基于web的即时通讯方法采用http协议,则具有跨操作系统、无须下载安装软件立即就能使用、不受防火墙影响(80端口:一般防火墙不做任何限制)等优势。现有基于web的即时通讯技术大致有三种:
1、基于浏览器插件(ActiveX),相对稳定,但需要用户允许并下载安装,容易受安全软件的拦截,同时受浏览器的限制,需要开发不同浏览器的版本。
2、基于Flash技术,如Yahoo Web Messager、Google Talk Gadget
3、基于HTTP技术,如MSN Web Messager、Web QQ。
但是现有基于web的即时通讯技术也存在以下几个问题:
基于web的即时通讯技术由于采方法用http协议,而http的无连接性、无状态性使得即时通讯的用户在线状态管理比较困难,具有较大的延迟性。
另外基于web的即时通讯技术存在单向性:只有客户端(web浏览器)主动去联系服务端,而服务端无法主动去联系某个用户。故消息的发送与接收会出现信息可能会丢失、延迟的情况。
【发明内容】
本发明提供一种在基于网站的系统中处理不同用户之间即时通讯的方法,解决了用户在线状态管理延迟性的情况,大幅降低在消息发送和接收上出现的信息丢失、延迟情况。
一种Web即时通讯方法,包括:
(a)消息发送的步骤;
第一用户通过第一网关将欲发送给第二用户的即时消息发送至服务器;
第一用户登录后,选择第二用户向其发送即时消息,浏览器会在后台首先会校验即时消息是否符合发送规则(例如消息内容过滤等),如果不符合则提示第一用户,同时停止即时消息的发送。如果符合,则开启一个异步即时消息线程,请求第一网关发送即时消息。
即时消息包括目标用户唯一识别码、来源用户唯一识别码以及数据内容,数据内容包括即时聊天内容以及其他附加信息。网关在接收到请求后,首先会校验数据的合法性,完整性,然后把即时消息发送到Web IM服务端(即服务器)。
(b)消息分发的步骤;
所述的服务器将接收到的即时消息保存至数据库中,服务器判断第二用户的状态信息,如果第二用户已登录,则将所述的即时消息转发至第二用户所登录的第二网关,如果第二用户未登录,则将该即时消息以离线消息的方式保存至数据库中;
步骤(b)中Web IM服务端接收到网关转发的即时消息,从中提取出来源用户唯一识别码、目标用户唯一识别码和数据内容;把这些数据保存至数据库中;检查目标用户(第二用户)的状态信息,如果已登录,则取出其所登录网关地址,把即时消息转发至该登录网关,否则该即时消息发送结束。
(c)消息接收的步骤;
第二用户由未登录状态改变为登录状态时,所述的服务器将数据库中属于第二用户的离线消息通过第二网关返回至第二用户的客户端,再显示给第二用户;
第二用户处于登录状态时,第二用户的客户端开启一个线程访问第二用户所登录的第二网关;
若第二网关没有接收到发向第二用户的即时消息,则该线程会被挂起,直至达到预定的挂起时间后该线程返回;
若第二网关接收到发向第二用户的即时消息,则该线程将即时消息返回给第二用户的客户端;
步骤(c)中包含两种情况,离线消息的接收和即时消息的接收,若第一用户发送即时消息时,恰好第二用户没有登录,那么在随后第二用户是,就会接收到离线消息。
若第一用户发送即时消息时,恰好第二用户已经登录,第二用户获取即时消息时,是其客户端后台会始终开启一个线程去访问网关获取即时消息。如果没有即时消息,则该线程会被网关挂起,进入阻塞状态,直至超过挂起时间,如果有属于第二用户的即时消息由Web IM服务端转发给当前网关。这时线程会被网关返回,同时将即时消息发送到第二用户的客户端。
(d)消息处理的步骤;
第二用户的客户端判断当前返回的线程是否已取到即时消息,
如果未取到即时消息,则返回步骤(c),直至第二用户离线;
如果取到即时消息,则将取到的即时消息显示给第二用户,然后返回步骤(c),直至第二用户离线。
步骤(d)中客户端将会判断当前返回线程是否已取到即时消息,如果未取到,则重新开启一个线程去执行消息接收流程,同时该线程则结束。如果有取到即时消息,则进行即时消息处理,最终把消息呈现给第二用户,然后重新开启一个线程去执行消息接收。
本发明中所述的第一网关、第二网关可以是不同的网关也可以是同一个网关,即进行通讯的两个用户可以分别登录不同的网关,也可以是登录在同一个网关上。
本发明所述的第一用户泛指通讯时发送消息的一方,第二用户泛指通讯时接收消息的一方。
步骤(b)中服务器判断第二用户的状态信息的步骤如下:
服务器以固定的频率(根据服务器的负荷量可以对频率进行调整)向所有网关查询,得到不断更新地第二用户的状态信息;服务器向所有网关查询得到第二用户的状态信息时,即可以是直接查询结果,也可以是对查询结果进行判断和处理后得到的状态信息。
第二用户的状态信息有如下四种情况:
第二用户已登录,且为新登录的用户;
第二用户已登录,但所登录的网关发生改变;
第二用户已登录,且状态信息保持不变;
第二用户处于离线状态。
当第二用户处于离线状态的时间达到预定值时,将第二用户的状态信息清理出网关系统缓存,且不再对第二用户的状态信息进行更新。
一般情况第二用户的在线状态有三种,可以是“在线”、“隐身”或“离线”。
在线:用户已经在系统中登录,其他用户可以看到其在线,可以接收到即时消息
隐身:用户已经在系统中登录,但是其他用户不能看见其在线状态,可以接收到即时消息
离线:用户未在系统中登录,不能接收到即时消息。
本发明步骤(b)以及步骤(c)中的,第二用户已登录时,均是可以接收即时消息的状态,也就是说“在线”、“隐身”均可以认为是已登录。
本发明方法在运行的过程中会出现不可抗拒的异常,比如网络异常、服务端异常等,本发明也提供了处理方法。
服务端异常处理:为了能让Web IM服务器能在最短的时间内恢复到异常出现之前,服务端会每隔固定时间会生成一个“服务端运行状态片断备份”,并将该“服务端运行状态片断备份”储存在服务器中,主要包括其网关信息、用户状态信息。异常发生时,会首先记录异常信息,以便帮助开发人员对异常进行还原修复;异常发生后会首先检索最近次保存的片断,快速的恢复到最近的服务状态。
网络异常处理:当网关在网络通讯异常的情况,会出现无法把消息发送到网关、网关无法把消息提交到Web IM服务端、服务端无法更新用户在线状态等情况,系统会忽略,同时会不断尝试与其通讯。
利用本发明即时通讯方法,可以扩展出群信息聊天,系统即时公告等。
本发明Web即时通讯方法通过对用户状态信息的更新,解决了用户在线状态管理延迟性的情况,大幅降低在消息发送和接收上出现的信息丢失、延迟情况。
【附图说明】
图1为本发明Web即时通讯方法运行环境的结构框图;
图2为本发明Web即时通讯方法的流程图;
图3为本发明Web即时通讯方法中消息接收步骤的流程图;
图4为本发明Web即时通讯方法中进行服务端异常处理的流程图。
【具体实施方式】
参见图1,本发明Web即时通讯方法的运行采用服务器推技术,用户在使用时无须安装任何浏览器插件;由于采用的技术是基于HTTP协议,可以轻松穿越防火墙的限制,适用于任何操作系统;所有即时消息的发送和接收都采用异步的方式(AJAX方式),提高用户体验,减少交互量。要使用该系统,用户必须拥有一个唯一识别码。
图1中若干个用户的客户端通过网关接入服务器,用户与网关之间,网关与服务器之间可进行消息的发送、接收,服务器通过对网关的访问可以得到用户的状态。图中第一用户为即时消息的发送方,第一用户通过第一网关与服务器相连,以第二用户为即时消息的接收方,第二用户通过第二网关与服务器相连。
参见图2、3,本发明Web即时通讯方法包括:
(a)消息发送的步骤;
第一用户通过第一网关将欲发送给第二用户的即时消息发送至服务器;浏览器会在后台首先会校验即时消息是否符合发送规则,如果不符合则提示第一用户,同时停止即时消息的发送。如果符合,则开启一个异步即时消息线程,请求第一网关发送即时消息。
即时消息包括目标用户唯一识别码、来源用户唯一识别码以及数据内容,数据内容包括即时聊天内容以及其他附加信息。网关在接收到请求后,首先会校验数据的合法性,完整性,然后把即时消息发送到服务器。
(b)消息分发的步骤;
服务器接收到第一网关转发的即时消息,从中提取出来源用户唯一识别码、目标用户唯一识别码和数据内容;把这些数据保存至数据库中可以作为聊天记录。
服务器需要判断第二用户的状态信息,如果第二用户已登录,则将所述的即时消息转发至第二用户所登录的第二网关,如果第二用户未登录,则将该即时消息以离线消息的方式保存至数据库中;
判断第二用户的状态信息时,服务器每隔5秒钟(根据服务器的负荷量可以对频率进行调整)向所有网关查询,得到不断更新的第二用户的状态信息;
第二用户的状态信息有如下四种情况:
第二用户已登录,且为新登录的用户;
第二用户已登录,但所登录的网关发生改变;
第二用户已登录,且状态信息保持不变;
第二用户处于离线状态。
当第二用户处于离线状态的时间达到预定值时,将第二用户的状态信息清理出网关系统缓存,且不再对第二用户的状态信息进行更新。可以减小网关及服务器的负荷量。
为了解决了用户在线状态管理延迟性的情况,服务器会不断地刷新所有用户的状态信息。
(c)消息接收的步骤;
步骤(c)中包含两种情况,离线消息的接收和即时消息的接收,若第一用户发送即时消息时,恰好第二用户没有登录,那么在第二用户由未登录状态改变为登录状态时,所述的服务器将数据库中属于第二用户的离线消息通过第二网关返回至第二用户的客户端,再显示给第二用户;
若第一用户发送即时消息时,恰好第二用户已经登录,第二用户获取即时消息时,是第二用户的客户端开启一个线程访问第二用户所登录的第二网关;
若第二网关没有接收到发向第二用户的即时消息,则该线程会被挂起,直至达到预定的挂起时间后该线程返回;
若第二网关接收到发向第二用户的即时消息,则该线程将即时消息返回给第二用户的客户端;
(d)消息处理的步骤;
第二用户的客户端判断当前返回的线程是否已取到即时消息,
如果未取到即时消息,则返回步骤(c),直至第二用户离线;
如果取到即时消息,则将取到的即时消息显示给第二用户,然后返回步骤(c),直至第二用户离线。
也就是说,只要第二用户处于登录状态,那么始终就会去执行步骤(c)、步骤(d)不断地获取即时消息。
同理,当第二用户向第一用户发送即时消息时,也是进行相应的处理,从未实现第一用户与第二用户之间的即时通讯。
参见图4,为了能让Web IM服务器能在最短的时间内恢复到异常出现之前,服务端会每隔固定时间会生成一个“服务端运行状态片断备份”,并将该“服务端运行状态片断备份”储存在服务器中,主要包括其网关信息、用户状态信息。异常发生时,会首先记录异常信息,以便帮助开发人员对异常进行还原修复;异常发生后会首先检索最近次保存的片断,快速的恢复到最近的服务状态。