发明内容
为了解决现有技术中的问题,本发明提供一种用于保持即时通信会话连续性的方法、服务器及系统,可以实现用户登录前后即时通信会话的无缝接续,实现连续会话。
本发明提供一种用于保持即时通信会话连续性的方法,包括:
即时通信服务器接收到客户端的接入请求时,检测所述客户端是否已登录;
当检测到所述客户端未登录时,所述即时通信服务器向所述客户端分配临时身份;
所述即时通信服务器接收到发给所述临时身份的消息时,检测所述客户端是否已登录;
当检测到所述客户端未登录时,所述即时通信服务器直接转发所述消息给所述临时身份;
当检测到所述客户端已登录时,所述即时通信服务器向所述消息的发送方发送提醒消息,所述提醒消息中包括所述临时身份对应的登录后的用户身份以及将所述消息发送给所述用户身份的链接。
进一步的,所述即时通信服务器接收到客户端的接入请求之前,包括:
根据所述客户端的cookie,所述即时通信服务器建立所述临时身份与对应的登录后的用户身份之间的映射表。
进一步的,所述即时通信服务器接收到客户端的接入请求之前,还包括:
所述即时通信服务器将所述映射表保存在redis中。
进一步的,所述即时通信服务器接收到客户端的接入请求之前,还包括:
所述即时通信服务器将所述映射表在所述客户端中进行缓存。
进一步的,所述检测所述客户端是否已登录包括:
所述即时通信服务器接收到客户端的接入请求;
所述即时通信服务器读取所述客户端的cookie;
所述即时通信服务器根据所述cookie调用用户中心进行验证。
本发明还提供一种用于保持即时通信会话连续性的服务器,包括:接收模块、检测模块、分配模块、转发模块和提醒模块,其中:
所述接收模块,用于接收客户端的接入请求和服务端发给所述客户端的消息;
所述检测模块,用于接收到所述客户端的接入请求时,检测所述客户端是否已登录;分配模块,用于当检测到所述客户端未登录时,向所述客户端分配临时身份;
所述检测模块,还用于接收到所述服务端发给所述临时身份的消息时,检测所述客户端是否已登录;
转发模块,用于当检测到所述客户端未登录时,直接转发所述消息给所述临时身份;
提醒模块,用于当检测到所述客户端已登录时,向所述服务端发送提醒消息,所述提醒消息中包括所述临时身份对应的登录后的用户身份以及将所述消息发送给所述用户身份的链接。
进一步的,所述即时通信服务器还用于根据所述客户端的cookie,建立所述临时身份与对应的登录后的用户身份之间的映射表。
进一步的,所述即时通信服务器还用于将所述映射表保存在redis中。
进一步的,所述即时通信服务器还用于将所述映射表在所述客户端中进行缓存。
进一步的,所述检测模块包括:
读取子模块,用于读取所述客户端的cookie;
验证子模块,用于根据所述cookie调用用户中心进行验证。
进一步的,本发明还提供一种用于保持即时通信会话连续性的系统,该系统包括客户端、服务端以及即时通信服务器;所述客户端,用于发送接入请求;所述服务端,用于发起向所述客户端的消息。
本发明带来的有益效果如下:
用户未登录时可以采用临时身份进行会话,用户登录后,即时通信服务器向消息的发送方发送提醒消息,提醒消息中包括临时身份对应的登录后的用户身份以及将消息发送给所述用户身份的链接,从而可以实现用户登录前后即时通信会话的无缝接续,实现连续会话,提高用户的聊天体验。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细的说明。
请参见图1,实施例一,一种用于保持即时通信会话连续性的方法,包括:
S11即时通信服务器接收到客户端的接入请求时,检测所述客户端是否已登录。
S12当检测到所述客户端未登录时,所述即时通信服务器向所述客户端分配临时身份。
S13所述即时通信服务器接收到发给所述临时身份的消息时,检测所述客户端是否已登录;当检测到所述客户端未登录时,转到步骤S14,当检测到所述客户端已登录时,转到步骤S15。
S14当检测到所述客户端未登录时,所述即时通信服务器直接转发所述消息给所述临时身份。
S15当检测到所述客户端已登录时,所述即时通信服务器向所述消息的发送方发送提醒消息,所述提醒消息中包括所述临时身份对应的登录后的用户身份以及将所述消息发送给所述用户身份的链接。
优选地,所述即时通信服务器接收到客户端的接入请求之前,可以包括:
根据所述客户端的cookie,所述即时通信服务器建立所述临时身份与对应的登录后的用户身份之间的映射表。
采用cookie建立临时身份与对应的登录后的用户身份之间的映射表无论在公网还是私有网络都适用,提高网络适配性。
优选的,所述即时通信服务器接收到客户端的接入请求之前,还包括:
所述即时通信服务器将所述映射表保存在redis中。
将所述映射表保存在redis中,可以支持多个进程同时查询映射表,提高查询效率。
优选的,所述即时通信服务器接收到客户端的接入请求之前,还包括:
所述即时通信服务器将所述映射表在所述客户端中进行缓存。
将所述映射表在所述客户端中进行缓存可以减小查询映射表的开销,进一步提高查询效率。
采用本实施例的技术方案,用户未登录时可以采用临时身份进行会话,用户登录后,即时通信服务器向消息的发送方发送提醒消息,提醒消息中包括临时身份对应的登录后的用户身份以及将消息发送给所述用户身份的链接,从而可以实现用户登录前后即时通信会话的无缝接续,实现连续会话,提高用户的聊天体验。
请参见图2,实施例二,一种用于保持即时通信会话连续性的方法,在该实施例中,检测所述客户端是否已登录的检测流程可以包括如下步骤:
S21所述即时通信服务器接收到客户端的接入请求。
S22所述即时通信服务器读取所述客户端的cookie。
S23所述即时通信服务器根据所述cookie调用用户中心进行验证。
实施例三,一种用于保持即时通信会话连续性的方法的具体应用。在本实施例中,用户使用web客户端与提供服务的服务端进行即时通信会话,即用户通过浏览器加载特定的网页,此网页中包含能够即时会话聊天的对话框(如图3),允许用户在此页面上进行与服务端的聊天会话活动。因为一般的网页加载是不需要用户进行特殊登录的,尤其是当用户没有强烈的需求时更不需要进行登录,因此为降低用户聊天的门槛,允许未登录用户发起聊天;同时,当有需要使得用户登录之后,为使得用户的聊天会话有连续性,实现了未登录用和登录用户之间的关联。
具体实现上:
在临时身份和登录用户身份之间建立映射表进行关联,该关联通过采用持久化的cookie来实现,由于IP地址对私有网络用户会产生冲突,因此在本实施例的技术方案中未采用IP地址进行关联。
cookie是由服务器生成,发送给浏览器(User-Agent),浏览器会将cookie的key/value保存到本地的文本文件内,下次请求同一网站时就发送该cookie给服务器(预先浏览器设置为启用cookie)。cookie名称和值可以由服务器自行定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以判断该用户是否合法用户以及是否需要重新登录等,服务器可以设置或读取cookies中包含信息,借此维护用户跟服务器会话中的状态。
其中,持久化cookie的内容范例可以包括但不限于:
qimtid=10000000620502;expires=Sun,10Nov201311:22:23GMT;path=/;domain=.bang.360.cn
可选的,可以设置该cookie在用户最后一次访问(无论用户是否登录)网站(例如同城帮http://bang.360.cn/)后的一个月内有效。
每条发给临时身份的消息,都检测该用户是否已经登录,判断是否登录,通过读取用户cookie然后调用用户中心的验证来实现。为支持多个转发进程同时查询,可以将该数据存储在redis中。同时,由于每条消息都查询redis开销较大,因此,优选地对映射表在各个转发进程内进行了本地内存缓存,同时维护一个redis连接池,需要远程查询时,可以重用长连接。
请参见图3,本实施例中,未登录用户进入页面后,会被分配一个临时身份,用户以临时身份直接跟商家聊天;用户登录后,同该用户聊天的商家如果继续向登录前的临时身份发消息,会收到该用户已经登录的提醒,并提供快捷方式,方便商家将消息发送给登录后的。商家同访客62052聊天,之后访客62052以moogates用户身份登录,当商家再次向访客62052发消息时,会收到该用户已经登录的提醒,并提供快捷方式,方便商家将消息发送给登录后的moogates用户。
请参见图4,实施例四,一种用于保持即时通信会话连续性的服务器,包括:接收模块42、检测模块422、分配模块423、转发模块424和提醒模块425,其中:
所述接收模块42,用于接收客户端的接入请求和服务端发给所述客户端的消息。
所述检测模块422,用于接收到所述客户端的接入请求时,检测所述客户端是否已登录。
分配模块423,用于当检测到所述客户端未登录时,向所述客户端分配临时身份。
所述检测模块422,还用于接收到所述服务端发给所述临时身份的消息时,检测所述客户端是否已登录。
转发模块424,用于当检测到所述客户端未登录时,直接转发所述消息给所述临时身份。
提醒模块425,用于当检测到所述客户端已登录时,向所述服务端发送提醒消息,所述提醒消息中包括所述临时身份对应的登录后的用户身份以及将所述消息发送给所述用户身份的链接。
优选的,所述即时通信服务器还用于根据所述客户端的cookie,建立所述临时身份与对应的登录后的用户身份之间的映射表。
优选的,所述即时通信服务器还用于将所述映射表保存在redis中。
优选的,所述即时通信服务器还用于将所述映射表在所述客户端中进行缓存。
优选的,所述检测模块包括:
读取子模块,用于读取所述客户端的cookie;
验证子模块,用于根据所述cookie调用用户中心进行验证。
请参见图5,实施例五,一种用于保持即时通信会话连续性的系统,该系统包括客户端51、服务端53以及上述即时通信服务器(即用于保持即时通信会话连续性的服务器)52;所述客户端,用于发送接入请求;所述服务端,用于发起向所述客户端的消息。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。