CN115174507B - 即时通信离线消息处理方法、客户端和服务器 - Google Patents

即时通信离线消息处理方法、客户端和服务器 Download PDF

Info

Publication number
CN115174507B
CN115174507B CN202110359491.9A CN202110359491A CN115174507B CN 115174507 B CN115174507 B CN 115174507B CN 202110359491 A CN202110359491 A CN 202110359491A CN 115174507 B CN115174507 B CN 115174507B
Authority
CN
China
Prior art keywords
client
common
session
message
messages
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110359491.9A
Other languages
English (en)
Other versions
CN115174507A (zh
Inventor
程五良
张振杰
宋祥伍
林锦滨
朱玉琦
江阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zitiao Network Technology Co Ltd
Original Assignee
Beijing Zitiao Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Zitiao Network Technology Co Ltd filed Critical Beijing Zitiao Network Technology Co Ltd
Priority to CN202110359491.9A priority Critical patent/CN115174507B/zh
Publication of CN115174507A publication Critical patent/CN115174507A/zh
Application granted granted Critical
Publication of CN115174507B publication Critical patent/CN115174507B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • H04L51/043Real-time or near real-time messaging, e.g. instant messaging [IM] using or handling presence information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/07User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail characterised by the inclusion of specific contents
    • H04L51/18Commands or executable codes

Abstract

本公开涉及一种即时通信离线消息处理方法、客户端和电子设备。一方面,服务器将离线消息中的普通消息和命令字消息进行分离,且相比于命令字消息而言优先向客户端同步普通消息。另一方面,服务器与客户端之间从用户‑会话‑消息的维度传输离线消息中的普通消息,从用户‑消息的维度传输离线消息中的命令字消息,并不是全量传输离线消息,使得客户端能够在会话被打开的情况下展示新产生的离线消息。从而,降低了离线消息的消息量,有利于客户端及时展示重要会话产生的离线消息,使得重要会话产生的离线消息能够提前同步,提升了离线消息的处理效率,使得用户使用IM软件应用的体验较佳。

Description

即时通信离线消息处理方法、客户端和服务器
技术领域
本公开涉及通信技术领域,尤其涉及一种即时通信(instant messaging,IM)离线消息处理方法、客户端和服务器。
背景技术
由于IM具备实时性和便捷性等优势而广泛应用在用户的生活和工作中,如IM软件应用可实现离线消息的如同步、显示等处理。目前,IM软件应用处理离线消息的方案是基于客户端(client)/服务器(server)架构的通信系统实现的。
在该方案中,用户1的客户端可向服务器发送离线消息。服务器可存储离线消息,并在用户2处于在线状态的情况下,可将离线消息发送给用户2的客户端,使得用户2的客户端对离线消息进行加载、渲染并展示给用户2。
然而,上述方案中,服务器与客户端之间从用户维度来传输离线消息,其中的如网络操作、数据库(data base,DB)读写操作(I/O)和计算操作容易引起严重耗时,还导致客户端无法及时获取到重要会话中的离线消息,造成离线消息的处理效率低下,严重影响用户使用IM软件应用的体验。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种即时通信离线消息处理方法、客户端和服务器。
第一方面,本公开提供了一种即时通信离线消息处理方法,包括:
客户端从服务器获取第一会话中的普通消息以及第一状态,普通消息为第一会话的会话内容,第一状态为第一会话的状态或普通消息的状态,第一状态是服务器基于命令字消息确定的,命令字消息为对第一会话或普通消息进行相应操作的命令字;
客户端将普通消息和第一状态存储在客户端的本地数据库中;
客户端在第一会话处于被打开的情况下,从客户端的本地数据库中获取普通消息以及第一状态,并基于普通消息以及第一状态展示第一会话中新产生的离线消息。
通过第一方面提供的方法,服务器与客户端之间可从用户-会话-消息的维度传输离线消息。在一个会话中的命令字消息先于普通消息接收的情况下,客户端可从服务器获取该会话中的普通消息和基于命令字消息确定的第一状态,使得客户端可将该会话中的普通消息和基于命令字消息确定的第一状态存储在客户端的本地数据库中。从而,在该会话被打开的情况下,客户端可从客户端的本地数据库中获取普通消息和基于命令字消息确定的第一状态,并基于普通消息和基于命令字消息确定的第一状态展示该会话中新产生的离线消息。
第二方面,本公开提供了一种即时通信离线消息处理方法,包括:
客户端从服务器获取第一会话中的普通消息,普通消息为第一会话的会话内容;
客户端将普通消息存储在客户端的本地数据库中;
客户端从服务器获取命令字消息,命令字消息为对第一会话或普通消息进行相应操作的命令字;
客户端基于命令字消息确定第一状态,第一状态为第一会话的状态或普通消息的状态;
客户端将第一状态存储在客户端的本地数据库中;
客户端在第一会话处于被打开的情况下,从客户端的本地数据库中获取普通消息以及第一状态,并基于普通消息以及第一状态展示第一会话中新产生的离线消息。
通过第二方面提供的方法,服务器与客户端之间可从用户-会话-消息的维度传输离线消息。在一个会话中的普通消息先于命令字消息接收的情况下,客户端可从服务器获取到该会话中的普通消息,使得客户端可将该会话中的普通消息存储在客户端的本地数据库中。然后,客户端可从服务器获取到命令字消息,使得客户端基于命令字消息确定第一状态,且将第一状态存储在客户端的本地数据库中。从而,在该会话被打开的情况下,客户端可从客户端的本地数据库中获取普通消息和基于命令字消息确定的第一状态,并基于普通消息和基于命令字消息确定的第一状态展示该会话中新产生的离线消息。
从而,一方面,服务器将离线消息中的普通消息和命令字消息进行分离,且相比于命令字消息而言优先向客户端同步普通消息(即服务器在接收到普通消息后,不会等待命令字消息,而是先向客户端发送普通消息)。另一方面,服务器与客户端之间从用户-会话-消息的维度传输离线消息中的普通消息,从用户-消息的维度传输离线消息中的命令字消息,并不是全量传输离线消息,使得客户端能够在会话被打开的情况下展示新产生的离线消息。从而,降低了离线消息的消息量,有利于客户端及时展示重要会话产生的离线消息,使得重要会话产生的离线消息能够提前同步,提升了离线消息的处理效率,使得用户使用IM软件应用的体验较佳。
在第一方面或第二方面的一种可能的设计中,在客户端展示离线消息中最新产生的P条普通消息时,该方法具体包括:客户端基于P条普通消息的序号,从客户端的本地数据库中获取M条普通消息的内容和状态,M条消息为第一会话中P条普通消息对应的序号范围内的全部普通消息,M≤P,P和M均为正整数;客户端基于第一会话中的全部普通消息的序号连续且递增以及M条普通消息的连续区间,从M条普通消息中确定N条已连续的普通消息,N<M,N为正整数;客户端基于N条普通消息的状态,在第一会话中显示N条普通消息的内容;客户端更新第一会话中的全部普通消息的连续区间;客户端基于更新后的第一会话中的全部普通消息的连续区间,从客户端的本地数据库中获取Q条普通消息,Q条普通消息为第一会话中在P条普通消息对应的序号范围内的除了N条普通消息之外的普通消息,Q<P,Q为自然数;客户端基于N条普通消息的状态和Q条普通消息的状态,在第一会话中显示N条普通消息的内容和Q条普通消息的内容。
在第一方面或第二方面的一种可能的设计中,客户端更新第一会话中的全部普通消息的连续区间,包括:客户端基于P条普通消息的序号、M条普通消息的序号和M条普通消息的连续区间,确定剩余普通消息的序号,剩余普通消息的序号为第一会话中在P条普通消息对应的序号范围内的除了M条普通消息之外的全部普通消息;客户端基于剩余普通消息的序号,从服务器获取第一会话中在剩余普通消息对应的序号范围内的全部普通消息;客户端基于M条普通消息的连续区间和第一会话中在剩余普通消息对应的序号范围内的全部普通消息,更新第一会话中的全部普通消息的连续区间,且将第一会话中在剩余普通消息对应的序号范围内的全部普通消息存储在客户端的本地数据库中。
在第一方面或第二方面的一种可能的设计中,客户端从服务器获取普通消息中的一条普通消息,包括:客户端通过处于在线状态的传输控制协议(Transmission ControlProtocol,TCP)长连接从服务器接收第一内容,第一内容中携带有第一会话中新产生的一条普通消息的内容和序号。
在第一方面或第二方面的一种可能的设计中,客户端从服务器获取普通消息,包括:客户端在确定TCP长连接处于不在线状态后,通过超文本传输安全协议(Hyper TextTransfer Protocol over SecureSocket Layer,HTTPS)连接向服务器发送第一请求,第一请求中携带有第一时间戳,第一时间戳为客户端在前一次从服务器接收到的会话的最大时间戳,第一请求用于请求时间戳大于第一时间戳的会话中的创建时刻大于第一时间戳的普通消息;客户端通过HTTPS连接从服务器接收第一响应,第一响应中携带有K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识,第一会话包含在K个第二会话中,每个第二会话的时间戳均大于第一时间戳,每个第二会话中的全部普通消息的创建时刻均大于第一时间戳,每个第二会话中的全部普通消息的序号连续且递增,第二时间戳为K个第二会话中的会话的最大时间戳,第一标识用于表示服务器中是否仍存储有时间戳大于第一时间戳的会话,K为正整数;客户端在客户端的本地数据库中存储K个第二会话中的多条普通消息各自对应的内容和序号以及第二时间戳;客户端在第一标识表示服务器中仍存储有时间戳大于第一时间戳的会话时,将第一时间戳更新为第二时间戳,并通过HTTPS连接向服务器发送第一请求,直至第一标识表示服务器中不存储有时间戳大于第一时间戳的会话为止。
在第一方面或第二方面的一种可能的设计中,客户端从服务器获取命令字消息中的一条命令字消息,包括:客户端通过处于在线状态的TCP长连接从服务器接收第二内容,第二内容中携带有第一会话中新产生的一条命令字消息的内容和序号,客户端对应的全部命令字消息的序号连续且递增。
在第一方面或第二方面的一种可能的设计中,客户端从服务器获取命令字消息,包括:客户端在确定TCP长连接处于不在线状态后,通过HTTPS连接向服务器发送第二请求,第二请求中携带有第一序号,第一序号为客户端对应的命令字消息的最大序号,第二请求用于请求序号大于第一序号的命令字消息;客户端通过HTTPS连接从服务器接收第二响应,第二响应中携带有L个命令字消息的内容和序号,命令字消息包含在L个命令字消息中,L个命令字消息的序号大于第一序号,L为正整数,客户端对应的全部命令字消息的序号连续且递增。
在第一方面或第二方面的一种可能的设计中,在客户端从服务器接收到命令字消息后,该方法包括:客户端在确定客户端的本地数据库中存储有第一会话或普通消息的情况下,基于命令字消息确定第一状态;客户端在确定客户端的本地数据库中未存储有第一会话或普通消息的情况下,丢弃命令字消息。
在第一方面或第二方面的一种可能的设计中,该方法还包括:客户端从服务器获取第一会话中的全部普通消息的可读总数;客户端将第一会话中的全部普通消息的可读总数与第一会话中的全部普通消息的已读总数之间的差值确定为第一会话中的全部普通消息的未读总数。
在第一方面或第二方面的一种可能的设计中,该方法还包括:客户端采用数字形式显示未读总数;和/或,客户端在未读总数不为0时,采用颜色形式进行提示。
在第一方面或第二方面的一种可能的设计中,该方法还包括:客户端在第一会话中新产生普通消息时,向服务器发送第三内容,第三内容中携带有普通消息的内容。
在第一方面或第二方面的一种可能的设计中,命令字消息是基于服务器从其他客户端接收到的用于对第一会话或普通消息进行相应操作的请求生成的。
第三方面,本公开提供了一种即时通信离线消息处理方法,包括:
服务器基于命令字消息确定第一状态,命令字消息为对第一会话或第一会话中的普通消息进行相应操作的命令字,第一状态为第一会话的状态或普通消息的状态,普通消息为第一会话的会话内容;
服务器向第一客户端发送普通消息和第一状态,以使第一客户端将普通消息和第一状态存储在第一客户端的本地数据库中,且在第一会话处于被打开的情况下,从第一客户端的本地数据库中获取普通消息以及第一状态,并基于普通消息以及第一状态展示第一会话中新产生的离线消息。
通过第三方面提供的方法,服务器与客户端之间可从用户-会话-消息的维度传输离线消息。在一个会话中的命令字消息先于普通消息接收的情况下,服务器可将该会话中的普通消息和基于命令字消息确定的第一状态发送给客户端,使得客户端可将该会话中的普通消息和基于命令字消息确定的第一状态存储在客户端的本地数据库中。从而,在该会话被打开的情况下,客户端可从客户端的本地数据库中获取普通消息和基于命令字消息确定的第一状态,并基于普通消息和基于命令字消息确定的第一状态展示该会话中新产生的离线消息。
第四方面,本公开提供了一种即时通信离线消息处理方法,包括:
服务器向第一客户端发送第一会话中的普通消息,普通消息为第一会话的会话内容,以使第一客户端将普通消息存储在第一客户端的本地数据库中;
服务器向第一客户端发送命令字消息,命令字消息为对第一会话或普通消息进行相应操作的命令字,以使第一客户端基于命令字消息确定第一状态,第一状态为第一会话的状态或普通消息的状态,且将第一状态存储在第一客户端的本地数据库中,并在第一会话处于被打开的情况下,从第一客户端的本地数据库中获取普通消息以及第一状态,基于普通消息以及第一状态展示第一会话中新产生的离线消息。
通过第四方面提供的方法,服务器与客户端之间可从用户-会话-消息的维度传输离线消息。在一个会话中的普通消息先于命令字消息接收的情况下,服务器可向客户端发送该会话中的普通消息,使得客户端可将该会话中的普通消息存储在客户端的本地数据库中。然后,服务器可向客户端发送命令字消息,使得客户端基于命令字消息确定第一状态,且将第一状态存储在客户端的本地数据库中。从而,在该会话被打开的情况下,客户端可从客户端的本地数据库中获取普通消息和基于命令字消息确定的第一状态,并基于普通消息和基于命令字消息确定的第一状态展示该会话中新产生的离线消息。
从而,一方面,服务器将离线消息中的普通消息和命令字消息进行分离,且相比于命令字消息而言优先向客户端同步普通消息(即服务器在接收到普通消息后,不会等待命令字消息,而是先向客户端发送普通消息)。另一方面,服务器与客户端之间从用户-会话-消息的维度传输离线消息中的普通消息,从用户-消息的维度传输离线消息中的命令字消息,并不是全量传输离线消息,使得客户端能够在会话被打开的情况下展示新产生的离线消息。从而,降低了离线消息的消息量,有利于客户端及时展示重要会话产生的离线消息,使得重要会话产生的离线消息能够提前同步,提升了离线消息的处理效率,使得用户使用IM软件应用的体验较佳。
在第三方面或第四方面的一种可能的设计中,该方法还包括:服务器在不同的存储空间中分开存储普通消息和命令字消息。
在第三方面或第四方面的一种可能的设计中,该方法还包括:服务器从第二客户端接收第三内容,第三内容中携带有普通消息的内容,第一客户端与第二客户端为第一会话中的不同用户对应的客户端;服务器确定普通消息的序号,普通消息的序号用于确保第一会话中的全部普通消息的序号连续且递增,并将第三内容的接收时刻确定为普通消息的创建时刻;服务器存储普通消息的内容、序号和创建时刻。
在第三方面或第四方面的一种可能的设计中,该方法还包括:服务器将第一会话的时间戳更新为普通消息的创建时刻,并存储第一会话的时间戳。
在第三方面或第四方面的一种可能的设计中,该方法还包括:服务器从第二客户端接收第三请求,第三请求用于对第一会话或普通消息进行相应操作,第一客户端与第二客户端为第一会话中的不同用户对应的客户端;服务器基于第三请求,生成命令字消息;服务器确定命令字消息的序号,命令字消息的序号用于确保第二客户端对应的全部命令字消息的序号连续且递增;服务器存储命令字消息的内容和序号。
在第三方面或第四方面的一种可能的设计中,该方法还包括:服务器基于命令字消息,确定第一状态,并存储第一状态。
在第三方面或第四方面的一种可能的设计中,服务器向第一客户端发送普通消息中的一条普通消息,包括:服务器通过处于在线状态的TCP长连接向第一客户端发送第一内容,第一内容中携带有第一会话中新产生的一条普通消息的内容和序号。
在第三方面或第四方面的一种可能的设计中,服务器向第一客户端发送普通消息,包括:服务器在确定TCP长连接处于不在线状态后,通过HTTPS连接从第一客户端接收第一请求,第一请求中携带有第一时间戳,第一时间戳为第一客户端在前一次从服务器接收到的会话的最大时间戳,第一请求用于请求时间戳大于第一时间戳的会话中的创建时刻大于第一时间戳的普通消息;服务器确定K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识,第一会话包含在K个第二会话中,每个第二会话的时间戳均大于第一时间戳,每个第二会话中的全部普通消息的创建时刻均大于第一时间戳,每个第二会话中的全部普通消息的序号连续且递增,第二时间戳为K个第二会话中的会话的最大时间戳,第一标识用于表示服务器中是否仍存储有时间戳大于第一时间戳的会话,K为正整数;服务器通过HTTPS连接向第一客户端发送第一响应,第一响应中携带有K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识;服务器在第一标识表示服务器中仍存储有时间戳大于第一时间戳的会话时,通过HTTPS连接继续从第一客户端接收第一请求,第一请求中的第一时间戳更新为第二时间戳,直至第一标识表示服务器中不存储有时间戳大于第一时间戳的会话为止。
在第三方面或第四方面的一种可能的设计中,该方法具体包括:服务器在时间戳大于第一时间戳的会话数量大于第一预设阈值时,从时间戳大于第一时间戳的全部会话中选择第一预设阈值的会话,将第一预设阈值的会话确定为K个第二会话,并确定第一标识表示服务器中仍存储有时间戳大于第一时间戳的会话;服务器在时间戳大于第一时间戳的会话数量小于等于第一预设阈值时,将时间戳大于第一时间戳的全部会话确定为K个第二会话,并确定第一标识表示服务器中不存储有时间戳大于第一时间戳的会话。
在第三方面或第四方面的一种可能的设计中,针对每个第二会话而言,该方法具体包括:服务器在创建时刻大于第一时间戳的普通消息的数量大于第二预设阈值时,从创建时刻大于第一时间戳的全部普通消息中选择第二预设阈值的普通消息,并将第二预设阈值的普通消息确定为多条普通消息;服务器在创建时刻大于第一时间戳的普通消息的数量小于等于第二预设阈值时,将创建时刻大于第一时间戳的全部普通消息确定为多条普通消息。
在第三方面或第四方面的一种可能的设计中,服务器向第一客户端发送命令字消息中的一条命令字消息,包括:服务器通过处于在线状态的TCP长连接向第一客户端发送第二内容,第二内容中携带有第一会话中新产生的一条命令字消息的内容和序号,客户端对应的全部命令字消息的序号连续且递增。
在第三方面或第四方面的一种可能的设计中,服务器向第一客户端发送命令字消息,包括:服务器在确定TCP长连接处于不在线状态后,通过HTTPS连接从第一客户端接收第二请求,第二请求中携带有第一序号,第一序号为第一客户端对应的命令字消息的最大序号,第二请求用于请求序号大于第一序号的命令字消息;服务器确定L个命令字消息的内容和序号,命令字消息包含在L个命令字消息中,L个命令字消息的序号大于第一序号,L为正整数,客户端对应的全部命令字消息的序号连续且递增;服务器通过HTTPS连接向第一客户端发送第二响应,第二响应中携带有L个命令字消息的内容和序号。
在第三方面或第四方面的一种可能的设计中,该方法还包括:服务器确定第一客户端对应的第一会话中的全部普通消息的可读总数;服务器向第一客户端发送第一客户端对应的第一会话中的全部普通消息的可读总数,以使第一客户端将第一会话中的全部普通消息的可读总数与第一会话中的全部普通消息的已读总数之间的差值确定为第一会话中的全部普通消息的未读总数。
在第三方面或第四方面的一种可能的设计中,服务器确定第一客户端对应的第一会话中的全部普通消息的可读总数,包括:服务器在普通消息对第一客户端产生未读数时,将可读总数更新为历史可读总数加i,i为普通消息的条数,i为正整数;服务器在普通消息对第一客户端未产生未读数时,将可读总数确定为历史可读总数。
第五方面,本公开提供了一种客户端,包括:存储器和处理器;存储器用于存储程序指令;处理器用于调用存储器中的程序指令使得客户端执行第一方面及第一方面任一种可能的设计中的即时通信离线消息处理方法,或者,处理器用于调用存储器中的程序指令使得客户端执行第二方面及第二方面任一种可能的设计中的即时通信离线消息处理方法。
第六方面,本公开提供了一种服务器,包括:存储器和处理器;存储器用于存储程序指令;处理器用于调用存储器中的程序指令使得服务器执行第三方面及第三方面任一种可能的设计中的即时通信离线消息处理方法,或者,处理器用于调用存储器中的程序指令使得服务器执行第四方面及第四方面任一种可能的设计中的即时通信离线消息处理方法。
第七方面,本公开提供了一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行第一方面及第一方面任一种可能的设计中的即时通信离线消息处理方法,或者,使得电子设备执行第二方面及第二方面任一种可能的设计中的即时通信离线消息处理方法,或者,使得电子设备执行第三方面及第三方面任一种可能的设计中的即时通信离线消息处理方法,或者,使得电子设备执行第四方面及第四方面任一种可能的设计中的即时通信离线消息处理方法。
第八方面,本公开提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行第一方面及第一方面任一种可能的设计中的即时通信离线消息处理方法,或者,使得计算机执行第二方面及第二方面任一种可能的设计中的即时通信离线消息处理方法,或者,使得计算机执行第三方面及第三方面任一种可能的设计中的即时通信离线消息处理方法,或者,使得计算机执行第四方面及第四方面任一种可能的设计中的即时通信离线消息处理方法。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的通信系统的示意图;
图2为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图;
图3为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图;
图4为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图;
图5为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图;
图6为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图;
图7为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图;
图8为本公开实施例提供的即时通信离线消息处理方法的流程示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
请参阅图1,图1为本公开实施例提供的通信系统的示意图。如图1所示,本公开的通信系统可以包括:服务器和多个客户端,服务器与每个客户端可通信连接。
其中,客户端可以为用户发送离线消息的客户端,也可以为用户接收离线消息的客户端。此处提及的发送或接收离线消息的用户可为单一用户或群组用户。
其中,客户端可通过终端设备中的应用程序(application,APP)实现离线消息处理方法,终端设备可以是手机(如折叠屏手机、智能手机等)、个人数字助理(personaldigital assistant,PDA)、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本等设备,本公开对终端设备的具体类型不作任何限制。
为了便于说明,图1中的多个客户端可采用用户1的第一客户端,且用户2的第二客户端的客户端进行举例示意。
其中,第一客户端与第二客户端之间的相互通信可理解为用户1和用户2可在一个会话中实现通信交流。此处提及的会话可以为点对点会话,方便实现单一用户对单一用户(即用户1对用户2)的通信,也可以为点对多点会话,方便实现多用户(包括用户1、用户2和其他用户)的群组交流。
当用户1和用户2在一个会话中进行通信交流时,第一客户端可向服务器发送离线消息。服务器可存储离线消息,且在用户2处于在线状态的情况下,服务器可将存储的离线消息发送给第二客户端,使得第二客户端可在该会话中向用户2展示离线消息。
对应地,第二客户端可向服务器发送离线消息。服务器可存储离线消息,且在用户1处于在线状态的情况下,服务器可将存储的离线消息发送给第一客户端,使得第一客户端可在该会话中向用户1展示离线消息。
基于上述过程,可通过服务器实现不同客户端之间的相互通信。
在现有的离线消息处理方法中,服务器(server)存储了每个用户与该用户收到的全部离线消息之间的映射关系,以及每个用户收到的全部离线消息的相关信息。
其中,离线消息的类型可划分为普通消息和命令字消息这两个类型。普通消息,即会话中产生的如文本、语音、视频、图片等会话内容。命令字消息,即对会话或会话中的普通消息进行相应操作的如删除会话、撤回普通消息、标记已读普通消息等命令字。
其中,一个用户收到的全部离线消息的相关信息可以包括但不限于:该用户所在全部会话产生的普通消息的内容、该用户所在全部会话产生的命令字消息的内容以及每条离线消息的序号。
另外,考虑到离线消息容易出现高并发的情况,故,一个用户的全部离线消息的序号递增且非连续。并且,离线消息的序号可采用如索引(index)进行表示。
在用户处于上线状态的情况下,该用户的客户端(client)可获取在客户端的本地数据库中存储的本地序号,并向服务器请求序号大于本地序号的全部离线消息。
如果该用户的客户端接收到的普通消息,则该用户的客户端将普通消息存储到客户端的本地数据库中。如果该用户的客户端接收到的是命令字消息,则该用户的客户端可基于预先约定好的IM协议进行对应的命令字处理,如更改普通消息或会话的状态。
然而,现有的离线消息处理方法存在如下缺陷:
1、服务器与客户端之间从用户-消息的维度来传输离线消息。
一方面,服务器与客户端之间需要传输和处理大量的命令字消息,其中的网络、本地数据的读写操作以及计算操作容易引起严重耗时。
另一方面,在一个会话产生超过预设数值的离线消息,且该会话中的用户并不关心这部分离线消息的情况下,服务器与客户端之间仍会传输这部分离线消息,导致服务器无法及时向客户端发送重要会话产生的离线消息,使得重要会话产生的离线消息滞后同步,造成离线消息的处理效率低下,使得用户使用IM软件应用的体验较差。
2、服务器将普通消息和命令字消息杂合存储,容易产生离线消息的堆积,导致离线消息的处理效率低下。
3、客户端从服务器接收离线消息,但客户端无法保障接收到的离线消息的完整性,导致离线消息的完整性在校验能力和补偿能力方面均较弱。其中,完整性用于衡量离线消息是否有丢失。例如,用户1向用户2发送了5条消息,但用户2的客户端只向用户2展示了4条消息,其中1条消息丢失。
上述方案中离线消息的完整性完全依赖于服务器与客户端在数据同步和数据库读写操作时的准确性,缺乏协议框架下的保障。一旦服务器与客户端之间的链路上的某个节点产生异常,将导致严重的消息空洞,且这些消息空洞也没有机会得到补偿,对于用户来说是无法接收上述问题的。
另外,在现有的离线消息处理方法中,在用户每次打开会话后,客户端可标记用户在该会话中读到的最新离线消息的位置A,并将位置A存储在客户端的本地数据库中。在新的未读离线消息产生后,客户端可将该会话中位置大于位置A的全部非用户发送的离线消息的总数作为离线消息的未读总数。
然而,客户端需要依赖客户端的本地数据库中存储的全部离线消息。一旦离线消息不全,客户端计算出的离线消息的总数将不够准确。并且,离线消息的未读总数计算策略(如更改某些类型的离线消息是否计入到离线消息的未读总数中)发生变化,客户端无法灵活且及时进行调整,且调整周期耗时较长。
基于现有的离线消息处理方法的描述,本公开考虑到上述缺陷,提供了一种即时通信离线消息处理方法、装置、客户端、服务器、计算机存储介质以及计算机程序产品,一方面,服务器将离线消息中的普通消息和命令字消息进行分离,且相比于命令字消息而言优先向客户端同步普通消息(即服务器在接收到普通消息后,不会等待命令字消息,而是先向客户端发送普通消息)。另一方面,服务器与客户端之间从用户-会话-消息的维度传输离线消息中的普通消息,从用户-消息的维度传输离线消息中的命令字消息,并不是全量传输离线消息,使得客户端能够在会话被打开的情况下展示新产生的离线消息。从而,降低了离线消息的消息量,有利于客户端及时展示重要会话产生的离线消息,使得重要会话产生的离线消息能够提前同步,提升了离线消息的处理效率,使得用户使用IM软件应用的体验较佳。
其中,本公开提供的即时通信离线消息处理方法采用图1中的用户1的第一客户端、用户2的第二客户端和服务器来执行。用户1的第一客户端为接收离线消息的客户端,且用户2的第二客户端为发送离线消息的客户端。
本公开中,在从第二客户端接收到普通消息或命令字消息后,服务器可将接收到得到的普通消息或命令字消息发送给第一客户端。考虑到服务器与客户端之间的网络连接情况,服务器可从第二客户端先接收普通消息后接收命令字消息,也可从第二客户端先接收命令字消息后接收普通消息。
下面,结合图2和图3,考虑普通消息和命令字消息的接收时机,对本公开提供的即时通信离线消息处理方法进行详细阐述。图2中,命令字消息先于普通消息接收。图3中,普通消息先于命令字消息接收。
请参阅图2,图2为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图。如图2所示,本公开提供的即时通信离线消息处理方法可以包括:
S101、服务器基于命令字消息确定第一状态。
服务器在从第二客户端获取到命令字消息后,可基于命令字消息确定第一状态。其中,命令字消息为对第一会话或第一会话中的普通消息进行相应操作的命令字,第一状态为第一会话的状态或普通消息的状态,普通消息为第一会话的会话内容。
另外,第一会话可以理解为第一客户端的用户1和第二客户端的用户2进行通信交流的一个会话。第一会话可为点对点会话或点对多点会话,本公开对此不做限定。
需要说明的是,除了上述过程之外,服务器也可向第一客户端发送命令字消息。但是,由于第一客户端的本地数据库中未存储有第一会话或普通消息。因此,第一客户端可将命令字消息丢弃。
S102、服务器向第一客户端发送普通消息和第一状态。
服务器在从第二客户端接收到普通消息后,可将普通消息和第一状态发送给第一客户端。其中,本公开对普通消息和第一状态的发送方式不做限定。
需要说明的是,步骤S101先于步骤S102,即第一状态的确定先于普通消息的接收。
S103、第一客户端将普通消息和第一状态存储在第一客户端的本地数据库中。
第一客户端在接收到普通消息和第一状态后,可将普通消息和第一状态存储在第一客户端的本地数据库中,方便及时从第一客户端的本地数据库中调用普通消息和第一状态。
S104、第一客户端在第一会话处于被打开的情况下,从第一客户端的本地数据库中获取普通消息以及第一状态,并基于普通消息以及第一状态展示第一会话中新产生的离线消息。
其中,第一会话处于被打开可以理解为第一客户端接收到用户进入到第一会话的操作。
基于图2实施例的描述,服务器与客户端之间可从用户-会话-消息的维度传输离线消息。在一个会话中的命令字消息先于普通消息接收的情况下,服务器可将该会话中的普通消息和基于命令字消息确定的第一状态发送给客户端,使得客户端可将该会话中的普通消息和基于命令字消息确定的第一状态存储在客户端的本地数据库中。从而,在该会话被打开的情况下,客户端可从客户端的本地数据库中获取普通消息和基于命令字消息确定的第一状态,并基于普通消息和基于命令字消息确定的第一状态展示该会话中新产生的离线消息。
请参阅图3,图3为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图。如图3所示,本公开提供的即时通信离线消息处理方法可以包括:
S201、服务器向第一客户端发送第一会话中的普通消息,普通消息为第一会话的会话内容。
服务器在从第二客户端接收到普通消息后,可将普通消息发送给第一客户端。其中,本公开对普通消息的发送方式不做限定。另外,第一会话的具体实现方式可参见图2中步骤S101的描述,此处不做赘述。
S202、第一客户端将普通消息存储在客户端的本地数据库中。
第一客户端在接收到普通消息后,可将普通消息存储在第一客户端的本地数据库中,方便及时从第一客户端的本地数据库中调用普通消息。
S203、服务器向第一客户端发送命令字消息,命令字消息为对第一会话或普通消息进行相应操作的命令字。
服务器在从第二客户端获取到命令字消息后,可将命令字消息发送给第一客户端。其中,本公开对命令字消息的发送方式不做限定。
需要说明的是,除了上述过程之外,服务器也可基于命令字消息确定第一状态。
S204、第一客户端基于命令字消息确定第一状态,第一状态为第一会话的状态或普通消息的状态。
由于第一客户端的本地数据库中存储有第一会话或普通消息。因此,第一客户端可基于命令字消息确定第一状态。
S205、第一客户端将第一状态存储在客户端的本地数据库中。
第一客户端在确定第一状态后,可将第一状态息存储在第一客户端的本地数据库中,方便及时从第一客户端的本地数据库中调用第一状态。
S206、第一客户端在第一会话处于被打开的情况下,从第一客户端的本地数据库中获取普通消息以及第一状态,并基于普通消息以及第一状态展示第一会话中新产生的离线消息。
其中,第一会话处于被打开的具体实现方式可参见图2中步骤S104的描述,此处不做赘述。
基于图3实施例的描述,服务器与客户端之间可从用户-会话-消息的维度传输离线消息。在一个会话中的普通消息先于命令字消息接收的情况下,服务器可向客户端发送该会话中的普通消息,使得客户端可将该会话中的普通消息存储在客户端的本地数据库中。然后,服务器可向客户端发送命令字消息,使得客户端基于命令字消息确定第一状态,且将第一状态存储在客户端的本地数据库中。从而,在该会话被打开的情况下,客户端可从客户端的本地数据库中获取普通消息和基于命令字消息确定的第一状态,并基于普通消息和基于命令字消息确定的第一状态展示该会话中新产生的离线消息。
综上,一方面,服务器将离线消息中的普通消息和命令字消息进行分离,且相比于命令字消息而言优先向客户端同步普通消息(即服务器在接收到普通消息后,不会等待命令字消息,而是先向客户端发送普通消息)。另一方面,服务器与客户端之间从用户-会话-消息的维度传输离线消息中的普通消息,从用户-消息的维度传输离线消息中的命令字消息,并不是全量传输离线消息,使得客户端能够在会话被打开的情况下展示新产生的离线消息。从而,降低了离线消息的消息量,有利于客户端及时展示重要会话产生的离线消息,使得重要会话产生的离线消息能够提前同步,提升了离线消息的处理效率,使得用户使用IM软件应用的体验较佳。
基于上述实施例的描述,服务器可在不同存储空间中分开存储离线消息中的普通消息和命令字消息,避免了将普通消息和命令字消息杂合存储而导致离线消息的处理效率低下的现象。
下面,结合图4和图5,分别介绍服务器存储普通消息和命令字消息的具体实现过程。
请参阅图4,图4为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图。如图4所示,本公开提供的即时通信离线消息处理方法可以包括:
S301、第二客户端在第一会话中新产生普通消息时,向服务器发送第三内容,第三内容中携带有普通消息的内容。
在接收到用户2在第一会话中新产生一条普通消息后,第二客户端便可将新产生的一条普通消息的内容携带在第三内容中,并将第三内容发送给服务器。
其中,本公开对第三内容的具体实现方式不做限定。
S302、服务器确定普通消息的序号,普通消息的序号用于确保第一会话中的全部普通消息的序号连续且递增,并将第三内容的接收时刻确定为普通消息的创建时刻。
基于步骤S301,服务器可接收到新产生的一条普通消息。从而,服务器可确定该条普通消息在第一会话中的序号,以确保第一会话中的全部普通消息的序号连续且递增,且可将第三内容的接收时刻作为该条普通消息的创建时刻。
其中,此处提及的递增是有规律性的,且保持序号间的递增量是相同的,如递增量可以为+1、+2、+10等。
S303、服务器存储普通消息的内容、序号和创建时刻。
S304、服务器将第一会话的时间戳更新为普通消息的创建时刻,并存储第一会话的时间戳。
其中,步骤S304为可选地。
综上,服务器从第二客户端每接收到新产生的一条普通消息,按照步骤S301-S303实施例的过程,便可存储普通消息的相关信息。另外,服务器为还可按照步骤S304实施例的过程更改且存储第一会话的时间戳。
请参阅图5,图5为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图。如图5所示,本公开提供的即时通信离线消息处理方法可以包括:
S401、第二客户端向服务器发送第三请求,第三请求用于对第一会话或普通消息进行相应操作,以使服务器生成一条命令字消息。
在接收到用户2在第一会话中请求执行某个操作(如撤回普通消息、将第一会话置顶、删除第一会话、退出第一会话、在第一会话中添加用户等)后,第二客户端便可向服务器发送第三请求。
其中,本公开对第三请求的具体实现方式不做限定。
S402、服务器基于第三请求,生成命令字消息。
基于步骤S401,服务器在接收到第三请求后,可基于第三请求生成对应的命令字消息。
S403、服务器确定命令字消息的序号,命令字消息的序号用于确保第二客户端对应的全部命令字消息的序号连续且递增。
服务可确定命令字消息的序号,以确保第二客户端对应的全部命令字消息的序号连续且递增。
其中,此处提及的递增是有规律性的,且保持序号间的递增量是相同的,如递增量可以为+1、+2、+10等。
S404、服务器存储命令字消息的内容和序号。
S405、服务器基于命令字消息,确定第一状态,并存储第一状态。
其中,步骤S405为可选地。
综上,服务器从第二客户端每接收到一个请求,按照步骤S401-S404实施例的过程,便可存储命令字消息的相关信息。另外,服务器为还可按照步骤S405实施例的过程更改第一会话或普通消息的状态,且存储该状态。
基于上述实施例的描述,服务器可主动向客户端发送离线消息,也可在接收到客户端的请求之后被动向客户端发送离线消息。从而,为实现服务器与客户端同步离线消息提供了多种渠道。
下面,结合图6,介绍服务器与客户端同步离线消息中的普通消息的具体实现过程。
请参阅图6,图6为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图。如图6所示,本公开提供的即时通信离线消息处理方法可以包括:
S501、服务器通过TCP长连接向第一客户端发送第一内容,第一内容中携带有第一会话中新产生的一条普通消息的内容和序号。
在从第二客户端接收到第一会话中新产生的一条普通消息后,服务器可将该条普通消息的内容和序号携带在第一内容中,并可通过TCP长连接,向第一客户端发送第一内容,使得第一客户端能够存储该条普通消息的内容和序号。
其中,本公开对第一内容的具体实现方式不做限定。另外,第一内容中还可携带有该条普通消息的创建时间、发送者、发送时间等相关信息。
S502、服务器判断第一内容是否发送成功。
由于TCP长连接可能处于在线状态,因此,服务器可确定第一内容发送成功。由于TCP长连接可能处于不在线状态,因此,服务器可确定第一内容发送失败。此时,服务器只会向第一客户端推送一次第一内容,故服务器不再继续执行步骤S501,而是等待是否能够通过HTTPS连接接收到第一客户端发送的请求。
S503、第一客户端在确定TCP长连接处于不在线状态后,通过HTTPS连接向服务器发送第一请求。
第一客户在确定TCP长连接处于不在线状态后,可确定无法从服务器接收到普通消息,便可采用如切换网络等冷启动的方式,通过HTTPS连接向服务器发送携带有第一时间戳的第一请求,使得服务器获知第一客户端请求时间戳大于第一时间戳的会话中的创建时刻大于第一时间戳的普通消息。
其中,第一时间戳为第一客户端在前一次从服务器接收到的会话的最大时间戳。此处提及的会话可以理解为包含有第一客户端的用户1的会话。并且,本公开对第一请求和第一时间戳的具体实现方式不做限定。
S504、服务器确定K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识。
在接收到第一请求后,服务器基于第一时间戳,可从用户1所在的全部会话中选择时间戳大于第一时间戳的会话,即每个会话称为一个第二会话。并且,服务器基于第一时间戳,可从每个第二会话中的全部普通消息中选择创建时刻大于第一时间戳的普通消息。
从而,服务器可确定K个第二会话中的多条普通消息各自对应的内容和序号,K为正整数。
其中,第一会话包含在K个第二会话中,每个第二会话的时间戳均大于第一时间戳,每个第二会话中的全部普通消息的创建时刻均大于第一时间戳,每个第二会话中的全部普通消息的序号连续且递增。
需要说明的是,除了上述方式之外,服务器基于第一时间戳,还可先确定普通消息再确定第二会话,也可同步确定第二会话和普通消息,本公开对此不做限定。
服务器可将K个第二会话中的会话的最大时间戳确定为第二时间戳。例如,用户1的全部会话中,会话1的时间戳为今日8点,会话2的时间戳为今日9点10分,会话3的时间戳为今日9点20分,且第一时间戳为今日8点半,K设为1,则服务器可确定K个第二会话包括会话2和会话3,且第二时间戳为会话3的时间戳。
由于受限于服务器与客户端之间的网络情况,因此,服务器无法一次性传输全部第二会话中的多条普通消息。从而,服务器可采用第一标识来表示服务器中是否仍存储有时间戳大于第一时间戳的会话。
S505、服务器通过HTTPS连接向第一客户端发送第一响应。
服务器可将确定好的K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识携带在第一响应中,并通过HTTPS连接将第一响应发送给第一客户端。
其中,本公开对第一响应的具体实现方式不做限定。
S506、第一客户端在第一客户端的本地数据库中存储K个第二会话中的多条普通消息各自对应的内容和序号以及第二时间戳。
在接收到第一响应之后,第一客户端可将K个第二会话中的多条普通消息各自对应的内容和序号和第二时间戳存储在第一客户端的本地数据库中。
S507、第一客户端在第一标识表示服务器中仍存储有时间戳大于第一时间戳的会话时,将第一时间戳更新为第二时间戳,并循环执行步骤S503-步骤S507,直至第一标识表示服务器中不存储有时间戳大于第一时间戳的会话为止。
需要说明的是,步骤S506和步骤S507的执行顺序不分先后,可先执行步骤S506后执行步骤S507,也可先执行S507后执行步骤S506,也可以同时执行步骤S506和S507,本公开对此不做限定。
综上,服务器与第一客户端之间可实现普通消息的同步。
在步骤S504中,服务器可预先设置会话数量的上限值,即第一预设阈值,以便快速确定K个第二会话。
在时间戳大于第一时间戳的会话数量大于第一预设阈值时,服务器可从时间戳大于第一时间戳的全部会话中选择第一预设阈值的会话,并将第一预设阈值的会话确定为K个第二会话。从而,服务器可确定第一标识表示服务器中仍存储有时间戳大于第一时间戳的会话。
在时间戳大于第一时间戳的会话数量小于等于第一预设阈值时,服务器可将时间戳大于第一时间戳的全部会话确定为K个第二会话。从而,服务器可确定第一标识表示服务器中不存储有时间戳大于第一时间戳的会话。
在步骤S504中,服务器可预先设置普通消息数量的上限值,即第二预设阈值,以便快速确定K个第二会话中的多条普通消息。
在创建时刻大于第一时间戳的普通消息的数量大于第二预设阈值时,服务器可从创建时刻大于第一时间戳的全部普通消息中选择第二预设阈值的普通消息,并将第二预设阈值的普通消息确定为多条普通消息。
在创建时刻大于第一时间戳的普通消息的数量小于等于第二预设阈值时,服务器可将创建时刻大于第一时间戳的全部普通消息确定为多条普通消息。
下面,结合图7,介绍服务器与客户端同步离线消息中的命令字消息的具体实现过程。
请参阅图7,图7为本公开实施例提供的即时通信离线消息处理方法的信令交互示意图。如图7所示,本公开提供的即时通信离线消息处理方法可以包括:
S601、服务器通过TCP长连接向第一客户端发送第二内容,第二内容中携带有第一会话中新产生的一条命令字消息的内容和序号,第一客户端对应的全部命令字消息的序号连续且递增。
在从第二客户端确定第一会话中新产生的一条命令字消息后,服务器可将该条命令字消息携带在第二内容中,并可通过TCP长连接向第一客户端发送第二内容,使得第一客户端能够基于该条命令字消息来更改第一会话的状态或者普通消息的状态。
其中,本公开对第二内容的具体实现方式不做限定。
S602、服务器判断第二内容是否发送成功。
由于TCP长连接可能处于在线状态,因此,服务器可确定第二内容发送成功。由于TCP长连接可能处于不在线状态,因此,服务器可确定第二内容发送失败。此时,服务器只会向第一客户端推送一次第二内容,故服务器不再继续执行步骤S601,而是等待是否能够通过HTTPS连接接收到第一客户端发送的请求。
S603、第一客户端在确定TCP长连接处于不在线状态后,通过HTTPS连接向服务器发送第二请求。
第一客户端在确定TCP长连接处于不在线状态后,可确定无法从服务器接收到命令字消息,便可采用如切换网络等冷启动的方式,通过HTTPS连接向服务器发送携带有第一序号的第二请求,使得服务器获知第一客户端请求序号大于第一序号的命令字消息。
其中,第一序号为第一客户端对应的命令字消息的最大序号。并且,第一客户端可实时更新第一客户端的本地数据库中存储的第一客户端对应的命令字消息的序号,保持第一客户端对应的命令字消息的序号为最大序号。其中,第一客户端可采用命令字消息列表对第一客户端对应的全部命令字信息各组的序号进行存储。
另外,本公开对第二请求和第一序号的具体实现方式不做限定。
S604、服务器确定L个命令字消息的内容和序号。
在接收到第二请求之后,服务器基于第一序号,可从第一客户端对应的全部命令字消息中选择L个命令字消息,并确定L个命令字消息的内容和序号。
其中,命令字消息包含在L个命令字消息中,L为正整数。
S605、服务器通过HTTPS连接向第一客户端发送第二响应,第二响应中携带有L个命令字消息的内容和序号。
服务器可将确定好的L个命令字消息的内容和序号携带在第二响应中,并通过HTTPS连接将第二响应发送给第一客户端。
其中,本公开对第二响应的具体实现方式不做限定。另外,L个命令字消息中,在一个命令字消息用于更改第一会话的状态时,第二响应中还可携带有第一会话的ID。在一个命令字消息用于更改普通消息的状态时,第二响应中还可携带有普通消息的ID。
S6061、第一客户端在确定第一客户端的本地数据库中存储有第一会话或普通消息的情况下,基于命令字消息确定第一状态,并将第一状态存储在第一客户端的本地数据库中。
S6062、第一客户端在确定第一客户端的本地数据库中未存储有第一会话或普通消息的情况下,丢弃命令字消息。
综上,服务器与第一客户端之间可实现命令字消息的同步。
基于上述实施例的描述,图2中的步骤S104或者图3中的步骤S206中,在第一客户端展示第一会话中新产生的离线消息时,第一客户端可拉取部分离线消息,优先展示第一客户端的本地数据库中存储的部分离线消息,再基于引入的全部离线消息的连续性,拉取全部离线消息,并展示全部离线消息。
下面,结合图8,介绍第一客户端展示第一会话中的离线消息中的最新产生的P条普通消息的具体实现过程。其中,P为正整数,本公开对P的数值不做限定。例如,P可设置为等于终端设备的屏幕中可显示一屏普通消息的数量,或者,P可设置为小于终端设备的屏幕中可显示一屏普通消息的数量。
请参阅图8,图8为本公开实施例提供的即时通信离线消息处理方法的流程示意图。如图8所示,本公开提供的即时通信离线消息处理方法可以包括:
S701、第一客户端基于P条普通消息的序号,从第一客户端的本地数据库中获取M条普通消息的内容和状态,M条消息为第一会话中P条普通消息对应的序号范围内的全部普通消息,M≤P,M为正整数。
由于P条普通消息可能全部存储在第一客户端的本地数据库中且全部能够进行展示,因此,第一客户端基于P条普通消息的序号,可从第一客户端的本地数据库中获取M条普通消息的内容和状态,且M=P,即第一客户端可从第一客户端的本地数据库中获取到P条普通消息。
又由于P条普通消息可能部分存储在第一客户端的本地数据库中,和/或,P条普通消息可能部分能够进行展示,因此,第一客户端基于P条普通消息的序号,可从在第一客户端的本地数据库中获取M条普通消息的内容和状态,且M<P,即第一客户端可从第一客户端的本地数据库中获取到P条普通消息中的部分普通消息。
S702、第一客户端基于第一会话中的全部普通消息的序号连续且递增以及M条普通消息的连续区间,从M条普通消息中确定N条已连续的普通消息,N<M,N为正整数。
基于图4实施例的描述,一个会话中的全部普通消息的序号可保持连续且递增。并且,一个会话中的多条普通消息可具备连续性。此处的连续性可以理解为两种情况。第一种情况是多条普通消息的序号连续且递增,则多条普通消息具备连续性。第二种情况是多条普通消息的序号不连续,且多条普通消息中序号缺失所对应的普通消息不能够进行展示,则多条普通消息具备连续性。故,多条普通消息可具备一个或者多个连续区域,且每个连续区域中的普通消息具备连续性。
另外,一个会话中的普通消息的连续区间可采用已连续消息列表存储在第一客户端的本地数据库中。
基于前述描述,服务器基于第一会话中的全部普通消息的序号连续且递增以及M条普通消息的连续区间,可从M条普通消息中确定N条已连续的普通消息,即N条普通消息需要具备连续性。
例如,假设M条普通消息的序号分别为{2,3,6,10},且M条普通消息的连续区间为[2,3]和[6,6]。在N设为1时,N条已连续的普通消息的序号包括{10}。在N设为2时,N条已连续的普通消息的序号仍只包括{10}。
又如,假设M条普通消息的序号分别为{2,3,6,9,10},且M条普通消息的连续区间为[2,3]和[6,6]。在N设为1时,N条已连续的普通消息的序号包括{10}。在N设为2时,N条已连续的普通消息的序号仍包括{9,10}。
其中,本公开对N的具体数值不做限定。另外,在M<P时,N也可以等于M。
S703、第一客户端基于N条普通消息的状态,在第一会话中显示N条普通消息的内容。
第一客户端基于N条普通消息的状态,可在第一会话中优先显示N条普通消息的内容,有利于提升用户使用IM软件应用的体验感。
S704、第一客户端更新第一会话中的全部普通消息的连续区间。
第一客户端基于P条普通消息的序号、M条普通消息的序号和M条普通消息的连续区间,可确定剩余普通消息的序号。其中,剩余普通消息为第一会话中在P条普通消息对应的序号范围内的除了M条普通消息之外的全部普通消息。
在剩余普通消息的序号不存在时,第一客户端无需从服务器中获取剩余普通消息。在剩余普通消息的序号存在时,第一客户端可从服务器中获取第一会话中在剩余普通消息对应的序号范围内的全部普通消息。
从而,第一客户端基于M条普通消息的连续区间和第一会话中在剩余普通消息对应的序号范围内的全部普通消息,可更新第一会话中的全部普通消息的连续区间,且将第一会话中在剩余普通消息对应的序号范围内的全部普通消息存储在第一客户端的本地数据库中;
例如,假设M条普通消息的序号分别为{2,3,6,10},且M条普通消息的连续区间为[2,3]和[6,6],且P设为10,P条普通消息对应的序号范围为[1,10],那么第一客户端可确定剩余普通消息的序号包括{1,4,5,7,8,9}。
在一些实施例中,第一客户端对M条普通消息的连续区间之间的消息空洞进行完整性的检查和补偿,并将补偿后的连续区间进行合并,来更新第一会话中的全部普通消息的连续区间。
第一客户端可从服务器获取消息空洞对应的普通消息,如序号包括{4,5}的普通消息。无论第一客户端是否接收到序号包括{4,5}的普通消息,第一客户端均可将M条普通消息的连续区间为[2,3]和[6,6]更新为连续区间为[2,6]。
接着,第一客户端基于在P条普通消息对应的序号范围,对更新后的第一会话中的全部普通消息的连续区间的左值进行完整性的检查和补偿,得到更新后的第一会话中的全部普通消息的连续区间。
第一客户端可从服务器获取左值对应的普通消息,如序号包括{1}的普通消息。无论第一客户端是否接收到序号包括{1}的普通消息,第一客户端均可将M条普通消息的连续区间为[2,6]更新为连续区间为[1,6]。
接着,第一客户端基于在P条普通消息对应的序号范围,对更新后的第一会话中的全部普通消息的连续区间的右值进行完整性的检查和补偿,得到更新后的第一会话中的全部普通消息的连续区间。
第一客户端可从服务器获取右值对应的普通消息,如序号包括{7,8,9}的普通消息。无论第一客户端是否接收到序号包括{7,8,9}的普通消息,第一客户端均可将M条普通消息的连续区间为[1,6]更新为连续区间为[1,10]。
综上,第一客户端得到更新后的第一会话中的全部普通消息的连续区间为[1,10]。
S705、第一客户端基于更新后的第一会话中的全部普通消息的连续区间,从第一客户端的本地数据库中获取Q条普通消息,Q条普通消息为第一会话中在P条普通消息对应的序号范围内的除了N条普通消息之外的全部普通消息,Q<P,Q为自然数。
由于更新后的第一会话中的全部普通消息的连续区间可确定第一客户端的本地数据库中存储的全部普通消息即为第一客户端需要展示的全部普通消息。
因此,第一客户端基于更新后的第一会话中的全部普通消息的连续区间,可确定除了N条普通消息之外是否还需从第一客户端的本地数据库中获取剩余普通消息。
在N<M时,第一客户端基于更新后的第一会话中的全部普通消息的连续区间,可确定Q>0,此时,第一客户端可从第一客户端的本地数据库中获取第一会话中在P条普通消息对应的序号范围内的除了N条普通消息之外的全部普通消息作为Q条普通消息。
在N=M时,第一客户端基于更新后的第一会话中的全部普通消息的连续区间,无需从第一客户端的本地数据库中获取普通消息,即Q=0。
S706、第一客户端基于N条普通消息的状态和Q条普通消息的状态,在第一会话中显示N条普通消息的内容和Q条普通消息的内容。
例如,P设为10,N设为1,则第一客户端可获取到M条普通消息的序号包括{2,3,6,10},且M条普通消息的连续区间为[2,3]和[6,6]。第一客户端可显示序号为{1}的普通消息。第一客户端分别补偿到序号包括{4,5}的普通消息、序号为{1}的普通消息和序号包括{7,8,9}的普通消息,得到更新后的第一会话中的全部普通消息的连续区间为[1,10]。第一客户端可从第一客户端的本地数据中自动获取序号包括{2,3,4,5,6,7,8,9,10}的9条普通消息,并触发显示序号包括{1,2,3,4,5,6,7,8,9,10}的10条普通消息。
综上,基于一个会话中的全部普通消息的连续性,不仅使得客户端能够保障从服务器接收到的普通消息的完整性,使得离线消息的完整性在校验能力和补偿能力方面均较强,提高了离线消息的容错率,还使得客户端能够快速向用户展示部分普通消息,再向用户及时展示全部普通消息,无需重新获取不能展示的普通消息,解决了由于服务器与客户端之间的链路上的某个节点产生异常而导致严重的消息空洞的问题,节省了展示离线消息的时长,提高了展示离线消息的完整性。
基于上述实施例的描述,除了执行图4实施例的步骤S302之外,服务器还可确定第一客户端对应的第一会话中的全部普通消息的可读总数,并向第一客户端发送第一客户端对应的第一会话中的全部普通消息的可读总数,使得第一客户端将第一会话中的全部普通消息的可读总数与第一会话中的全部普通消息的已读总数之间的差值确定为第一会话中的全部普通消息的未读总数。
其中,本公开对服务器确定第一客户端对应的第一会话中的全部普通消息的可读总数的具体实现方式不做限定。并且,第一客户端可进行MarkRead操作,在第一会话处于被打开的情况下,将第一会话中的全部普通消息的已读总数确定为第一会话中的全部普通消息的可读总数,实现第一会话中的全部普通消息的已读总数的更新。
在一些实施例中,服务器可基于普通消息的可读数的当前计算策略,判断新产生的一条普通消息是否对第一客户端(即第一会话中的用户1)产生未读数。在普通消息对第一客户端产生未读数时,服务器可将第一会话中的全部普通消息的可读总数更新为第一会话中的全部普通消息的历史可读总数加1。在普通消息对第一客户端产生未读数时,服务器可将第一会话中的全部普通消息的可读总数确定为第一会话中的全部普通消息的历史可读总数。
其中,在展示第一会话中的普通消息的同时,第一客户端可采用数字形式显示未读总数;和/或,第一客户端在未读总数不为0时,可采用颜色形式进行提示。
综上,由服务器接管一个会话中的全部普通消息的未读数的计算,且全部普通消息的未读数的计算是基于会话维度进行统计的,准确度和灵活度更高,从而在离线消息的未读总数计算策略发生变化的情况下,服务器可进行及时调整,无需客户端进行调整,也无需客户端通过客户端的本地数据库中存储的一个会话中的全部普通消息的未读总数来计算。
示例性地,本公开提供一种即时通信离线消息处理装置。本公开的即时通信离线消息处理装置可设置在客户端中,可实现上述图1-图8实施例的即时通信离线消息处理方法对应于第一客户端和第二客户端的操作,其实现原理和技术效果类似,此处不再赘述。
示例性地,本公开提供一种即时通信离线消息处理装置。本公开的即时通信离线消息处理装置可设置在服务器中,可实现上述图1-图8实施例的即时通信离线消息处理方法对应于服务器的操作,其实现原理和技术效果类似,此处不再赘述。
示例性地,本公开提供一种客户端,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中一个或多个计算机程序被存储在存储器中;一个或多个处理器在执行一个或多个计算机程序时,使得电子设备实现前文实施例的即时通信离线消息处理方法。
示例性地,本公开提供一种服务器,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中一个或多个计算机程序被存储在存储器中;一个或多个处理器在执行一个或多个计算机程序时,使得电子设备实现前文实施例的即时通信离线消息处理方法。
示例性地,本公开提供一种芯片系统,芯片系统应用于包括存储器和传感器的电子设备;芯片系统包括:处理器;当处理器执行前文实施例的即时通信离线消息处理方法。
示例性地,本公开提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器使得电子设备执行时实现前文实施例的即时通信离线消息处理方法。
示例性地,本公开提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行前文实施例的即时通信离线消息处理方法。
在上述实施例中,全部或部分功能可以通过软件、硬件、或者软件加硬件的组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本公开实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (32)

1.一种即时通信离线消息处理方法,其特征在于,包括:
客户端从服务器获取第一会话中的普通消息以及第一状态,所述普通消息为第一会话的会话内容,所述第一状态为所述第一会话的状态或所述普通消息的状态,所述第一状态是所述服务器基于命令字消息确定的,所述命令字消息为对所述第一会话或所述普通消息进行相应操作的命令字;
所述客户端将所述普通消息和所述第一状态存储在所述客户端的本地数据库中;
所述客户端在所述第一会话处于被打开的情况下,从所述客户端的本地数据库中获取所述普通消息以及所述第一状态,并基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
所述方法还包括:
在所述客户端展示所述离线消息中最新产生的P条普通消息时,根据所述第一会话中的全部普通消息的序号连续且递增,以及所述P条普通消息中M条消息的连续区间,从所述客户端的本地数据库中确定N条已连续的普通消息,并显示所述N条普通消息的内容;其中,所述第一会话中的全部普通消息的序号连续且递增,所述M条消息为所述P条普通消息的序号对应的序号范围内的全部普通消息,M≤P,N≤M,P、M和N均为正整数。
2.一种即时通信离线消息处理方法,其特征在于,包括:
客户端从服务器获取第一会话中的普通消息,所述普通消息为第一会话的会话内容;
所述客户端将所述普通消息存储在所述客户端的本地数据库中;
所述客户端从所述服务器获取命令字消息,所述命令字消息为对所述第一会话或所述普通消息进行相应操作的命令字;
所述客户端基于所述命令字消息确定第一状态,所述第一状态为所述第一会话的状态或所述普通消息的状态;
所述客户端将所述第一状态存储在所述客户端的本地数据库中;
所述客户端在所述第一会话处于被打开的情况下,从所述客户端的本地数据库中获取所述普通消息以及所述第一状态,并基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
所述方法还包括:
在所述客户端展示所述离线消息中最新产生的P条普通消息时,根据所述第一会话中的全部普通消息的序号以及M条消息的连续区间,从所述客户端的本地数据库中确定N条已连续的普通消息,并显示所述N条普通消息的内容;其中,所述第一会话中的全部普通消息的序号连续且递增,所述M条消息为所述P条普通消息的序号对应的序号范围内的全部普通消息,M≤P,N≤M,P、M和N均为正整数。
3.根据权利要求1或2所述的方法,其特征在于,在所述客户端展示所述离线消息中最新产生的P条普通消息时,所述方法包括:
所述客户端基于所述P条普通消息的序号,从所述客户端的本地数据库中获取M条普通消息的内容和状态;
所述客户端基于所述第一会话中的全部普通消息的序号连续且递增以及所述M条普通消息的连续区间,从所述M条普通消息中确定N条已连续的普通消息,N<M;
所述客户端基于所述N条普通消息的状态,在所述第一会话中显示所述N条普通消息的内容;
所述客户端更新所述第一会话中的全部普通消息的连续区间;
所述客户端基于更新后的所述第一会话中的全部普通消息的连续区间,从所述客户端的本地数据库中获取Q条普通消息,所述Q条普通消息为所述第一会话中在所述P条普通消息对应的序号范围内的除了所述N条普通消息之外的全部普通消息,Q<P,Q为自然数;
所述客户端基于所述N条普通消息的状态和所述Q条普通消息的状态,在所述第一会话中显示所述N条普通消息的内容和所述Q条普通消息的内容。
4.根据权利要求3所述的方法,其特征在于,所述客户端更新所述第一会话中的全部普通消息的连续区间,包括:
所述客户端基于所述P条普通消息的序号、所述M条普通消息的序号和所述M条普通消息的连续区间,确定剩余普通消息的序号,所述剩余普通消息的序号为所述第一会话中在所述P条普通消息对应的序号范围内的除了所述M条普通消息之外的全部普通消息;
所述客户端基于所述剩余普通消息的序号,从服务器获取所述第一会话中在所述剩余普通消息对应的序号范围内的全部普通消息;
所述客户端基于所述M条普通消息的连续区间和所述第一会话中在所述剩余普通消息对应的序号范围内的全部普通消息,更新所述第一会话中的全部普通消息的连续区间,且将所述第一会话中在所述剩余普通消息对应的序号范围内的全部普通消息存储在所述客户端的本地数据库中。
5.根据权利要求1-2、或4任一项所述的方法,其特征在于,所述客户端从服务器获取普通消息中的一条普通消息,包括:
所述客户端通过处于在线状态的传输控制协议TCP长连接从所述服务器接收第一内容,所述第一内容中携带有所述第一会话中新产生的一条普通消息的内容和序号。
6.根据权利要求1-2、或4任一项所述的方法,其特征在于,所述客户端从服务器获取普通消息,包括:
所述客户端在确定TCP长连接处于不在线状态后,通过超文本传输安全协议HTTPS连接向所述服务器发送第一请求,所述第一请求中携带有第一时间戳,所述第一时间戳为所述客户端在前一次从所述服务器接收到的会话的最大时间戳,所述第一请求用于请求时间戳大于所述第一时间戳的会话中的创建时刻大于所述第一时间戳的普通消息;
所述客户端通过HTTPS连接从所述服务器接收第一响应,所述第一响应中携带有K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识,所述第一会话包含在所述K个第二会话中,每个第二会话的时间戳均大于所述第一时间戳,每个第二会话中的全部普通消息的创建时刻均大于所述第一时间戳,每个第二会话中的全部普通消息的序号连续且递增,所述第二时间戳为所述K个第二会话中的会话的最大时间戳,所述第一标识用于表示所述服务器中是否仍存储有时间戳大于所述第一时间戳的会话,K为正整数;
所述客户端在所述客户端的本地数据库中存储所述K个第二会话中的多条普通消息各自对应的内容和序号以及所述第二时间戳;
所述客户端在所述第一标识表示所述服务器中仍存储有时间戳大于所述第一时间戳的会话时,将所述第一时间戳更新为所述第二时间戳,并通过HTTPS连接向所述服务器发送所述第一请求,直至所述第一标识表示所述服务器中不存储有时间戳大于所述第一时间戳的会话为止。
7.根据权利要求2或4所述的方法,其特征在于,所述客户端从所述服务器获取命令字消息中的一条命令字消息,包括:
所述客户端通过处于在线状态的TCP长连接从所述服务器接收第二内容,所述第二内容中携带有所述第一会话中新产生的一条命令字消息的内容和序号,所述客户端对应的全部命令字消息的序号连续且递增。
8.根据权利要求2或4所述的方法,其特征在于,所述客户端从所述服务器获取命令字消息,包括:
所述客户端在确定TCP长连接处于不在线状态后,通过HTTPS连接向所述服务器发送第二请求,所述第二请求中携带有第一序号,所述第一序号为所述客户端对应的命令字消息的最大序号,所述第二请求用于请求序号大于所述第一序号的命令字消息;
所述客户端通过HTTPS连接从所述服务器接收第二响应,所述第二响应中携带有L个命令字消息的内容和序号,所述命令字消息包含在所述L个命令字消息中,所述L个命令字消息的序号大于所述第一序号,L为正整数,所述客户端对应的全部命令字消息的序号连续且递增。
9.根据权利要求2或4所述的方法,其特征在于,在所述客户端从服务器接收到命令字消息后,所述方法包括:
所述客户端在确定所述客户端的本地数据库中存储有所述第一会话或所述普通消息的情况下,基于所述命令字消息确定所述第一状态;
所述客户端在确定所述客户端的本地数据库中未存储有所述第一会话或所述普通消息的情况下,丢弃所述命令字消息。
10.根据权利要求1-2、或4任一项所述的方法,其特征在于,所述方法还包括:
所述客户端从服务器获取所述第一会话中的全部普通消息的可读总数;
所述客户端将所述第一会话中的全部普通消息的可读总数与所述第一会话中的全部普通消息的已读总数之间的差值确定为所述第一会话中的全部普通消息的未读总数。
11.根据权利要求1-2、或4任一项所述的方法,其特征在于,所述命令字消息是基于服务器从其他客户端接收到的用于对所述第一会话或所述普通消息进行相应操作的请求生成的。
12.一种即时通信离线消息处理方法,其特征在于,包括:
服务器基于命令字消息确定第一状态,所述命令字消息为对第一会话或第一会话中的普通消息进行相应操作的命令字,所述第一状态为所述第一会话的状态或所述普通消息的状态,所述普通消息为第一会话的会话内容;
所述服务器向第一客户端发送所述普通消息和所述第一状态,以使所述第一客户端将所述普通消息和所述第一状态存储在所述第一客户端的本地数据库中,且在所述第一会话处于被打开的情况下,从所述第一客户端的本地数据库中获取所述普通消息以及所述第一状态,并基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
所述服务器在不同的存储空间中分开存储所述普通消息和所述命令字消息。
13.一种即时通信离线消息处理方法,其特征在于,包括:
服务器向第一客户端发送第一会话中的普通消息,所述普通消息为所述第一会话的会话内容,以使所述第一客户端将所述普通消息存储在所述第一客户端的本地数据库中;
所述服务器向所述第一客户端发送命令字消息,所述命令字消息为对所述第一会话或所述普通消息进行相应操作的命令字,以使所述第一客户端基于所述命令字消息确定第一状态,所述第一状态为所述第一会话的状态或所述普通消息的状态,且将所述第一状态存储在所述第一客户端的本地数据库中,并在所述第一会话处于被打开的情况下,从所述第一客户端的本地数据库中获取所述普通消息以及所述第一状态,基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
所述服务器在不同的存储空间中分开存储所述普通消息和所述命令字消息。
14.根据权利要求13所述的方法,其特征在于,所述方法还包括:
所述服务器从第二客户端接收第三内容,所述第三内容中携带有所述普通消息的内容,所述第一客户端与所述第二客户端为所述第一会话中的不同用户对应的客户端;
所述服务器确定所述普通消息的序号,所述普通消息的序号用于确保所述第一会话中的全部普通消息的序号连续且递增,并将所述第三内容的接收时刻确定为所述普通消息的创建时刻;
所述服务器存储所述普通消息的内容、序号和创建时刻。
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
所述服务器将所述第一会话的时间戳更新为所述普通消息的创建时刻,并存储所述第一会话的时间戳。
16.根据权利要求13所述的方法,其特征在于,所述方法还包括:
所述服务器从第二客户端接收第三请求,所述第三请求用于对第一会话或所述普通消息进行相应操作,所述第一客户端与所述第二客户端为所述第一会话中的不同用户对应的客户端;
所述服务器基于所述第三请求,生成所述命令字消息;
所述服务器确定所述命令字消息的序号,所述命令字消息的序号用于确保所述第二客户端对应的全部命令字消息的序号连续且递增;
所述服务器存储所述命令字消息的内容和序号。
17.根据权利要求16所述的方法,其特征在于,所述方法还包括:
所述服务器基于所述命令字消息,确定所述第一状态,并存储所述第一状态。
18.根据权利要求12-17中的任一项所述的方法,其特征在于,所述服务器向第一客户端发送普通消息中的一条普通消息,包括:
所述服务器通过处于在线状态的TCP长连接向所述第一客户端发送第一内容,所述第一内容中携带有所述第一会话中新产生的一条普通消息的内容和序号。
19.根据权利要求12-17中的任一项所述的方法,其特征在于,所述服务器向第一客户端发送普通消息,包括:
所述服务器在确定TCP长连接处于不在线状态后,通过HTTPS连接从所述第一客户端接收第一请求,所述第一请求中携带有第一时间戳,所述第一时间戳为所述第一客户端在前一次从所述服务器接收到的会话的最大时间戳,所述第一请求用于请求时间戳大于所述第一时间戳的会话中的创建时刻大于所述第一时间戳的普通消息;
所述服务器确定K个第二会话中的多条普通消息各自对应的内容和序号、第二时间戳和第一标识,所述第一会话包含在所述K个第二会话中,每个第二会话的时间戳均大于所述第一时间戳,每个第二会话中的全部普通消息的创建时刻均大于所述第一时间戳,每个第二会话中的全部普通消息的序号连续且递增,所述第二时间戳为所述K个第二会话中的会话的最大时间戳,所述第一标识用于表示所述服务器中是否仍存储有时间戳大于所述第一时间戳的会话,K为正整数;
所述服务器通过HTTPS连接向所述第一客户端发送第一响应,所述第一响应中携带有所述K个第二会话中的多条普通消息各自对应的内容和序号、所述第二时间戳和所述第一标识;
所述服务器在所述第一标识表示所述服务器中仍存储有时间戳大于所述第一时间戳的会话时,通过HTTPS连接继续从所述第一客户端接收所述第一请求,所述第一请求中的第一时间戳更新为所述第二时间戳,直至所述第一标识表示所述服务器中不存储有时间戳大于所述第一时间戳的会话为止。
20.根据权利要求19所述的方法,其特征在于,所述方法具体包括:
所述服务器在时间戳大于所述第一时间戳的会话数量大于第一预设阈值时,从时间戳大于所述第一时间戳的全部会话中选择所述第一预设阈值的会话,将所述第一预设阈值的会话确定为所述K个第二会话,并确定所述第一标识表示所述服务器中仍存储有时间戳大于所述第一时间戳的会话;
所述服务器在时间戳大于所述第一时间戳的会话数量小于等于第一预设阈值时,将时间戳大于所述第一时间戳的全部会话确定为所述K个第二会话,并确定所述第一标识表示所述服务器中不存储有时间戳大于所述第一时间戳的会话。
21.根据权利要求19所述的方法,其特征在于,针对每个第二会话而言,所述方法具体包括:
所述服务器在创建时刻大于所述第一时间戳的普通消息的数量大于第二预设阈值时,从创建时刻大于所述第一时间戳的全部普通消息中选择所述第二预设阈值的普通消息,并将所述第二预设阈值的普通消息确定为所述多条普通消息;
所述服务器在创建时刻大于所述第一时间戳的普通消息的数量小于等于第二预设阈值时,将创建时刻大于所述第一时间戳的全部普通消息确定为所述多条普通消息。
22.根据权利要求13-17中的任一项所述的方法,其特征在于,所述服务器向所述第一客户端发送命令字消息中的一条命令字消息,包括:
所述服务器通过处于在线状态的TCP长连接向所述第一客户端发送第二内容,所述第二内容中携带有所述第一会话中新产生的一条命令字消息的内容和序号,所述客户端对应的全部命令字消息的序号连续且递增。
23.根据权利要求13-17中的任一项所述的方法,其特征在于,所述服务器向所述第一客户端发送命令字消息,包括:
所述服务器在确定TCP长连接处于不在线状态后,通过HTTPS连接从所述第一客户端接收第二请求,所述第二请求中携带有第一序号,所述第一序号为所述第一客户端对应的命令字消息的最大序号,所述第二请求用于请求序号大于所述第一序号的命令字消息;
所述服务器确定L个命令字消息的内容和序号,所述命令字消息包含在所述L个命令字消息中,所述L个命令字消息的序号大于所述第一序号,L为正整数,所述客户端对应的全部命令字消息的序号连续且递增;
所述服务器通过HTTPS连接向所述第一客户端发送第二响应,所述第二响应中携带有所述L个命令字消息的内容和序号。
24.根据权利要求12-17、20-21中的任一项所述的方法,其特征在于,所述方法还包括:
所述服务器确定所述第一客户端对应的所述第一会话中的全部普通消息的可读总数;
所述服务器向所述第一客户端发送所述第一客户端对应的所述第一会话中的全部普通消息的可读总数,以使所述第一客户端将所述第一会话中的全部普通消息的可读总数与所述第一会话中的全部普通消息的已读总数之间的差值确定为所述第一会话中的全部普通消息的未读总数。
25.根据权利要求24所述的方法,其特征在于,所述服务器确定所述第一客户端对应的所述第一会话中的全部普通消息的可读总数,包括:
所述服务器在所述普通消息对所述第一客户端产生未读数时,将所述可读总数更新为历史可读总数加i,i为普通消息的条数,i为正整数;
所述服务器在所述普通消息对所述第一客户端未产生未读数时,将所述可读总数确定为历史可读总数。
26.一种客户端,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中所述一个或多个计算机程序被存储在所述存储器中;其特征在于,所述一个或多个处理器在执行所述一个或多个计算机程序时,使得所述客户端实现如权利要求1、3-11任一项所述的即时通信离线消息处理方法,或者,使得所述客户端实现如权利要求2-11任一项所述的即时通信离线消息处理方法。
27.一种服务器,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中所述一个或多个计算机程序被存储在所述存储器中;其特征在于,所述一个或多个处理器在执行所述一个或多个计算机程序时,使得所述服务器实现如权利要求12、13-25任一项所述的即时通信离线消息处理方法,或者,使得所述服务器实现如权利要求13-25任一项所述的即时通信离线消息处理方法。
28.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1、3-11任一项所述的即时通信离线消息处理方法,使得所述电子设备执行如权利要求2-11任一项所述的即时通信离线消息处理方法,或者,或者,使得所述电子设备执行如权利要求12、13-25任一项所述的即时通信离线消息处理方法,或者,使得所述电子设备执行如权利要求13-25任一项所述的即时通信离线消息处理方法。
29.一种即时通信离线消息处理装置,其特征在于,包括:
获取模块,用于从服务器获取第一会话中的普通消息以及第一状态,所述普通消息为第一会话的会话内容,所述第一状态为所述第一会话的状态或所述普通消息的状态,所述第一状态是所述服务器基于命令字消息确定的,所述命令字消息为对所述第一会话或所述普通消息进行相应操作的命令字;
存储模块,用于将所述普通消息和所述第一状态存储在客户端的本地数据库中;
展示模块,所述客户端在所述第一会话处于被打开的情况下,用于从所述客户端的本地数据库中获取所述普通消息以及所述第一状态,并基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
所述展示模块,还用于在所述客户端展示所述离线消息中最新产生的P条普通消息时,根据所述第一会话中的全部普通消息的序号以及M条消息的连续区间,从所述客户端的本地数据库中确定N条已连续的普通消息,并显示所述N条普通消息的内容;其中,所述第一会话中的全部普通消息的序号连续且递增,所述M条消息为所述P条普通消息的序号对应的序号范围内的全部普通消息,M≤P,N≤M,P、M和N均为正整数。
30.一种即时通信离线消息处理装置,其特征在于,包括:
获取模块,用于从服务器获取第一会话中的普通消息,所述普通消息为第一会话的会话内容;
存储模块,用于将所述普通消息存储在客户端的本地数据库中;
所述获取模块,还用于从所述服务器获取命令字消息,所述命令字消息为对所述第一会话或所述普通消息进行相应操作的命令字;
确定模块,用于基于所述命令字消息确定第一状态,所述第一状态为所述第一会话的状态或所述普通消息的状态;
所述存储模块,还用于将所述第一状态存储在所述客户端的本地数据库中;
展示模块,所述客户端在所述第一会话处于被打开的情况下,用于从所述客户端的本地数据库中获取所述普通消息以及所述第一状态,并基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
所述展示模块,还用于在所述客户端展示所述离线消息中最新产生的P条普通消息时,根据所述第一会话中的全部普通消息的序号以及M条消息的连续区间,从所述客户端的本地数据库中确定N条已连续的普通消息,并显示所述N条普通消息的内容;其中,所述第一会话中的全部普通消息的序号连续且递增,所述M条消息为所述P条普通消息的序号对应的序号范围内的全部普通消息,M≤P,N≤M,P、M和N均为正整数。
31.一种即时通信离线消息处理装置,其特征在于,包括:
确定模块,用于基于命令字消息确定第一状态,所述命令字消息为对第一会话或第一会话中的普通消息进行相应操作的命令字,所述第一状态为所述第一会话的状态或所述普通消息的状态,所述普通消息为第一会话的会话内容;
发送模块,用于向第一客户端发送所述普通消息和所述第一状态,以使所述第一客户端将所述普通消息和所述第一状态存储在所述第一客户端的本地数据库中,且在所述第一会话处于被打开的情况下,从所述第一客户端的本地数据库中获取所述普通消息以及所述第一状态,并基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
存储模块,用于在服务器不同的存储空间中分开存储所述普通消息和所述命令字消息。
32.一种即时通信离线消息处理装置,其特征在于,包括:
发送模块,用于向第一客户端发送第一会话中的普通消息,所述普通消息为所述第一会话的会话内容,以使所述第一客户端将所述普通消息存储在所述第一客户端的本地数据库中;
所述发送模块,还用于向所述第一客户端发送命令字消息,所述命令字消息为对所述第一会话或所述普通消息进行相应操作的命令字,以使所述第一客户端基于所述命令字消息确定第一状态,所述第一状态为所述第一会话的状态或所述普通消息的状态,且将所述第一状态存储在所述第一客户端的本地数据库中,并在所述第一会话处于被打开的情况下,从所述第一客户端的本地数据库中获取所述普通消息以及所述第一状态,基于所述普通消息以及所述第一状态展示所述第一会话中新产生的离线消息;
存储模块,用于在服务器不同的存储空间中分开存储所述普通消息和所述命令字消息。
CN202110359491.9A 2021-04-02 2021-04-02 即时通信离线消息处理方法、客户端和服务器 Active CN115174507B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110359491.9A CN115174507B (zh) 2021-04-02 2021-04-02 即时通信离线消息处理方法、客户端和服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110359491.9A CN115174507B (zh) 2021-04-02 2021-04-02 即时通信离线消息处理方法、客户端和服务器

Publications (2)

Publication Number Publication Date
CN115174507A CN115174507A (zh) 2022-10-11
CN115174507B true CN115174507B (zh) 2023-10-27

Family

ID=83475814

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110359491.9A Active CN115174507B (zh) 2021-04-02 2021-04-02 即时通信离线消息处理方法、客户端和服务器

Country Status (1)

Country Link
CN (1) CN115174507B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1794723A (zh) * 2005-10-11 2006-06-28 华为技术有限公司 一种离线消息处理方法
CN103051520A (zh) * 2013-01-05 2013-04-17 北京小米科技有限责任公司 即时通信工具中同步离线会话消息的方法及装置
CN109302341A (zh) * 2018-10-30 2019-02-01 北京达佳互联信息技术有限公司 即时通信方法、装置、电子设备及存储介质
CN109525486A (zh) * 2018-11-27 2019-03-26 北京微播视界科技有限公司 即时通信的会话消息加载方法、装置、电子设备及介质
CN109639564A (zh) * 2018-12-12 2019-04-16 金瓜子科技发展(北京)有限公司 一种获取离线消息的方法、装置及计算机可读存储介质
CN110011907A (zh) * 2019-04-16 2019-07-12 腾讯科技(深圳)有限公司 一种消息展示的方法、消息处理的方法及装置
CN110290050A (zh) * 2019-05-23 2019-09-27 北京达佳互联信息技术有限公司 消息处理方法、装置、电子设备及存储介质
CN112333337A (zh) * 2019-07-17 2021-02-05 腾讯科技(深圳)有限公司 一种消息查看方法、装置、设备及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100518068C (zh) * 2006-06-02 2009-07-22 阿里巴巴集团控股有限公司 一种通过浏览器实现即时通信的方法及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1794723A (zh) * 2005-10-11 2006-06-28 华为技术有限公司 一种离线消息处理方法
CN103051520A (zh) * 2013-01-05 2013-04-17 北京小米科技有限责任公司 即时通信工具中同步离线会话消息的方法及装置
CN109302341A (zh) * 2018-10-30 2019-02-01 北京达佳互联信息技术有限公司 即时通信方法、装置、电子设备及存储介质
CN109525486A (zh) * 2018-11-27 2019-03-26 北京微播视界科技有限公司 即时通信的会话消息加载方法、装置、电子设备及介质
CN109639564A (zh) * 2018-12-12 2019-04-16 金瓜子科技发展(北京)有限公司 一种获取离线消息的方法、装置及计算机可读存储介质
CN110011907A (zh) * 2019-04-16 2019-07-12 腾讯科技(深圳)有限公司 一种消息展示的方法、消息处理的方法及装置
CN110290050A (zh) * 2019-05-23 2019-09-27 北京达佳互联信息技术有限公司 消息处理方法、装置、电子设备及存储介质
CN112333337A (zh) * 2019-07-17 2021-02-05 腾讯科技(深圳)有限公司 一种消息查看方法、装置、设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Digital Forensic Analysis of Instant Messaging Applications on Android Smartphones";Hao Zhang;《2018 International Conference on Computing, Networking and Communications (ICNC)》;全文 *
基于Node.js的即时消息系统设计与实现;王超;《中国优秀硕士学位论文全文数据库信息科技辑》;全文 *

Also Published As

Publication number Publication date
CN115174507A (zh) 2022-10-11

Similar Documents

Publication Publication Date Title
CN106209948B (zh) 一种数据推送方法及装置
US11388271B2 (en) Ensuring properly ordered events in a distributed computing environment
US8600363B2 (en) Synchronization in unified messaging systems
US20120323990A1 (en) Efficient state reconciliation
US11036924B2 (en) Realtime synchronized document editing by multiple users for blogging
EP2629452B1 (en) Method for displaying message and message display apparatus
US6993522B2 (en) System and method for resolving conflicts detected during a synchronization session
WO2014131299A1 (en) Method, system, server and client device for message synchronizing
CN111277483B (zh) 一种多端消息的同步方法、服务器及可存储介质
CN101729441B (zh) 更新提醒方法、系统、更新源服务器及接入服务器
US6901415B2 (en) Method and system for processing notifications
WO2015017482A1 (en) Messaging over http protocol for data exchange
CN112838980B (zh) 一种消息处理方法、系统、装置、电子设备及存储介质
CN115174507B (zh) 即时通信离线消息处理方法、客户端和服务器
CN105339906B (zh) 控制对永久存储设备的数据写入的方法
EP2027669A2 (en) Methods and systems for bandwidth adaptive n-to-n communication in a distributed system
CN103034632A (zh) 一种信息传送方法和系统
CN115314457B (zh) 离线消息处理方法及装置
CN114915652B (zh) 一种消息推送方法、装置、电子设备及存储介质
CN113472469B (zh) 一种数据同步方法、装置、设备及存储介质
CN114338255B (zh) 群组管理方法及装置
CN113220760A (zh) 一种数据处理方法、装置、服务器及存储介质
CN116455889A (zh) 文件的上传处理方法、装置、系统、电子设备及存储介质
CN109819005A (zh) 一种信息获取方法及其设备、系统、终端、服务器
CN117493380A (zh) 数据处理方法、装置、电子设备和计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant