CN113905005A - 即时通讯的客户端状态更新方法和装置 - Google Patents
即时通讯的客户端状态更新方法和装置 Download PDFInfo
- Publication number
- CN113905005A CN113905005A CN202111160477.2A CN202111160477A CN113905005A CN 113905005 A CN113905005 A CN 113905005A CN 202111160477 A CN202111160477 A CN 202111160477A CN 113905005 A CN113905005 A CN 113905005A
- Authority
- CN
- China
- Prior art keywords
- target
- client
- server
- connection
- state
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
- H04L51/043—Real-time or near real-time messaging, e.g. instant messaging [IM] using or handling presence information
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请涉及一种即时通讯的客户端状态更新方法和装置。该方法包括:通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息;若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态;在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。本申请解决了高并发下服务端资源浪费严重的技术问题。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种即时通讯的客户端状态更新方法和装置。
背景技术
即时通讯(Instant Messaging,简称IM)是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。即时通讯服务要求客户端与服务端之间维护一条长连接,从而使得服务端能够及时地接收和推送即时通讯消息。这个长连接并不是建立完成后就一直存在的,长连接连通过程中,服务端会将客户端的状态记为在线状态,长连接断开时,服务端会将客户端的状态记为离线状态。
目前,相关技术中,客户端为了维护其在线状态,从而持续使用即时通讯服务,客户端需要不间断的向服务端发送ping状态信息,告诉服务端自己仍活着,服务端则在接收到ping状态信息后,同步更新本机内存和分布式缓存中的客户端状态。然而,客户端发送ping状态信息这一操作在即时通讯服务中尤为频繁,每一个客户端为了保活,均需不间断的向服务端发送ping状态,尤其是一些Android设备,用户即使在不使用应用时,应用并未休眠,可能24小时都处于活动状态,仍然不停的再向服务端发送ping状态信息,因此服务端对于连接客户端的状态维护一直处于高并发状态下,高并发下服务端同步更新本机缓存和分布式缓存的操作,极大浪费服务端资源。
针对高并发下服务端资源浪费严重的问题,目前尚未提出有效的解决方案。
发明内容
本申请提供了一种即时通讯的客户端状态更新方法和装置,以解决高并发下服务端资源浪费严重的技术问题。
根据本申请实施例的一个方面,本申请提供了一种即时通讯的客户端状态更新方法,包括:
通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息;
若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态;
在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。
可选地,服务端为目标长连接分配有第二目标分布式缓存,用于存储目标长连接上产生的消息,所述方法还包括:
在预设时间内未接收到心跳数据包的情况下,回收第二目标分布式缓存,以使第二目标分布式缓存处于可分配状态。
可选地,在服务端本机内存中将客户端的状态确定为在线状态包括以下其中之一:延长在服务端的本地内存中存储的目标过期时间,其中,目标过期时间为目标长连接的过期时间;重置服务端的本地内存中的目标计时器,以重新开始目标长连接的离线倒计时。
可选地,延长在服务端本地内存中存储的目标过期时间包括:在本地内存中获取与目标长连接绑定的目标句柄,其中,目标句柄为目标长连接建立时,服务端为目标长连接创建的;通过目标句柄确定目标长连接的配置参数的存储扇区;修改存储扇区中的目标数据,以延长目标长连接的过期时间。
可选地,在由服务端中的目标进程执行客户端的即时通讯服务任务的情况下,所述方法还包括按照如下方式对客户端的状态进行更新:获取目标进程;检测目标进程的运行状态;在目标进程处于异常状态的情况下,检测目标句柄的操作状态;在目标句柄处于无操作对象状态的情况下,将客户端的状态确定为离线状态。
可选地,在由服务端的子服务端执行客户端的即时通讯服务任务的情况下,所述方法还包括按照如下方式对客户端的状态进行更新:检测子服务端的运行状态;在子服务端处于宕机状态的情况下,将客户端的状态确定为离线状态。
可选地,目标分布式缓存还用于同步记录其他客户端的连接状态,在其他客户端对应的长连接的过期时间内未接收到心跳数据包的情况下,所述方法还包括:将其他客户端在第一目标分布式缓存上记录的在线状态更新为离线状态。
可选地,将客户端的状态确定为离线状态之后,所述方法还包括:通过目标句柄断开目标长连接;删除目标句柄,并释放目标句柄关联的内存资源。
可选地,通过目标句柄断开目标长连接之前,所述方法还包括按照如下方式为目标长连接创建目标句柄:从目标长连接的配置参数中提取出硬件识别标识和连接识别标识,其中,硬件识别标识用于识别客户端的硬件设备,任意两个长连接的连接识别标识不同;创建与硬件识别标识和连接识别标识均关联的目标句柄。
可选地,通过目标句柄断开目标长连接包括:在目标句柄关联的硬件识别标识和连接识别标识与目标长连接配置参数的标识信息均一致的情况下,断开目标长连接。
可选地,回收第二目标分布式缓存之前,所述方法还包括:从第二目标分布式缓存中提取出目标长连接上产生的所有消息数据;将消息数据与客户端的识别标识映射存储在数据库中。
可选地,回收第二目标分布式缓存之后,所述方法还包括:在客户端与服务端建立了新的长连接,且客户端本地存储的消息数据已经同步至客户端当前的会话界面的情况下,从数据库中将与识别标识映射存储的至少一部分消息数据同步至客户端当前的会话界面。
根据本申请实施例的另一方面,本申请提供了一种即时通讯的客户端状态更新装置,包括:
接收模块,用于通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息;
在线更新模块,用于若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态;
离线更新模块,用于在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。
根据本申请实施例的另一方面,本申请提供了一种电子设备,包括存储器、处理器、通信接口及通信总线,存储器中存储有可在处理器上运行的计算机程序,存储器、处理器通过通信总线和通信接口进行通信,处理器执行计算机程序时实现上述方法的步骤。
根据本申请实施例的另一方面,本申请还提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质,程序代码使处理器执行上述的方法。
本申请实施例提供的上述技术方案与相关技术相比具有如下优点:
本申请技术方案为通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息;若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态;在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。本申请中,服务端在接收到客户端发送的ping状态信息的情况下,仅仅更新本机内存中存储的客户端状态,而只在预设时间内未接收到客户端发送的ping状态信息的情况下,才同步将本机内存和分布式缓存中的客户端状态离线,由此极大减少了对分布式缓存的句柄调用及其并发量,有效减小服务端压力,解决了高并发下服务端资源浪费严重的技术问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为根据本申请实施例提供的一种可选的即时通讯的客户端状态更新方法硬件环境示意图;
图2为根据本申请实施例提供的一种可选的即时通讯的客户端状态更新方法流程示意图;
图3为根据本申请实施例提供的一种可选的即时通讯的客户端状态更新装置框图;
图4为本申请实施例提供的一种可选的电子设备结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本申请的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。
相关技术中,客户端为了维护其在线状态,从而持续使用即时通讯服务,客户端需要不间断的向服务端发送ping状态信息,告诉服务端自己仍活着,服务端则在接收到ping状态信息后,同步更新本机内存和分布式缓存中的客户端状态。然而,客户端发送ping状态信息这一操作在即时通讯服务中尤为频繁,每一个客户端为了保活,均需不间断的向服务端发送ping状态,尤其是一些Android设备,用户即使在不使用应用时,应用并未休眠,可能24小时都处于活动状态,仍然不停的再向服务端发送ping状态信息,因此服务端对于连接客户端的状态维护一直处于高并发状态下,高并发下服务端同步更新本机缓存和分布式缓存的操作,极大浪费服务端资源。
为了解决背景技术中提及的问题,根据本申请实施例的一方面,提供了一种即时通讯的客户端状态更新方法的实施例。
可选地,在本申请实施例中,上述即时通讯的客户端状态更新方法可以应用于如图1所示的由客户端101和服务端103所构成的硬件环境中。如图1所示,服务端103通过网络与客户端101进行连接,可用于为客户端提供服务,如即时通讯服务,可在服务端上或独立于服务端设置数据库105,用于为服务端103提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,客户端101包括但不限于PC、手机、平板电脑等,也包括以上设备中安装的应用程序。
本申请实施例中的一种即时通讯的客户端状态更新方法可以由服务端103来执行,如图2所示,该方法可以包括以下步骤:
步骤S202,通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息。
长连接,可以在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包,多用于操作频繁,点对点的通讯。使用长连接的优点是针对点对点操作频繁的通信中,通信双方不用频繁地进行TCP握手,由此在一定程度上减少通信双方的资源浪费。但是客户端发送心跳数据包是非常频繁的操作,因此为了进一步减少客户端资源浪费,本申请可以将客户端发送的心跳数据包的大小仅设置为一个字节,内容为“-99”。心跳数据包体积的减小,可以节约客户端的电量消耗及流量消耗,内容专门设置是为了区分心跳数据包与其他数据包。不仅如此,由于心跳数据包体积的减小,服务端在同时维护大量客户端的长连接时,可以有效减少并发的压力。
步骤S204,若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态。
本申请实施例中,服务端在接收到客户端发送的心跳数据包,且存在与目标长连接对应的连接记录的情况下,仅需要在本机内存中将客户端确定为在线状态,而无需去操作分布式缓存。现有技术中需要同步更新本机内存和分布式缓存中客户端的在线状态,更新本机内存和分布式缓存均需要调用句柄进行操作,句柄高并发会严重造成服务端性能不稳定。然而,本申请通过上述方案,仅需要在本机内存中将客户端确定为在线状态,而无需去操作分布式缓存,即达到了让服务器记录客户端状态的变化,如可以是在线状态的延续,又减少了句柄的高并发调用操作,极大程度减少了资源浪费的情况,提升服务端性能的稳定性。
本申请实施例中分布式缓存可以采用redis数据库。Redis是一个高性能的key-value数据库,支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
在另一实施例中,若不存在与目标长连接对应的连接记录,说明本机内存中该客户端与服务端的连接状态信息意外丢失,但该目标长连接却还存在,此时服务端需要在本机内存中重新建立该客户端与服务端之间的、与该目标长连接对应的连接状态信息,即对应的连接记录,并继续维护客户端的状态。
步骤S206,在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。
本申请实施例中,仅在将客户端离线时,才需要去操作分布式缓存redis,即删除服务端本地内存中的连接记录,同时删除第一目标分布式缓存中目标长连接的连接状态信息。
通过步骤S202至S206,本申请服务端在接收到客户端发送的ping状态信息的情况下,仅仅更新本机内存中存储的客户端状态,而只在预设时间内未接收到客户端发送的ping状态信息的情况下,才同步将本机内存和分布式缓存中的客户端状态离线,由此极大减少了对分布式缓存的句柄调用及其并发量,有效减小服务端压力,解决了高并发下服务端资源浪费严重的技术问题。
可选地,服务端为目标长连接分配有第二目标分布式缓存,用于存储目标长连接上产生的消息,所述方法还包括:
在预设时间内未接收到心跳数据包的情况下,回收第二目标分布式缓存,以使第二目标分布式缓存处于可分配状态。
本申请实施例中,分布式缓存不仅可以作为服务端内存的第二存储,还可以根据服务端需要进行分配,即服务端与客户端建立长连接进行即时通讯服务时,服务端为该长连接分配一定空间的分布式缓存,即第二目标分布式缓存,从而在长连接保持过程中将客户端所有的即时通讯消息存储在第二目标分布式缓存中。将服务端数据读写的压力下放到第二目标分布式缓存,最后在长连接断开时,再从第二目标分布式缓存中统一提取数据进行存储,并回收第二目标分布式缓存,以使第二目标分布式缓存处于可分配状态,从而即保证了数据备份,又使得分布式缓存可以灵活地根据服务端需要填补性能缺口。
可选地,在服务端本机内存中将客户端的状态确定为在线状态包括以下其中之一:延长在服务端的本地内存中存储的目标过期时间,其中,目标过期时间为目标长连接的过期时间;重置服务端的本地内存中的目标计时器,以重新开始目标长连接的离线倒计时。
本申请实施例中,上述预设时间可以是目标长连接的过期时间,每次在线状态的延续时,目标长连接的过期时间增加,如建立长连接后,确定该长连接的过期时间为12:00,在线状态延续时增加过期时间,变为12:30。预设时间还可以是倒计时,如每次倒计时30秒,30秒内接收到心跳数据包,则重置计时器,重新开始30秒的倒计时。
可选地,延长在服务端本地内存中存储的目标过期时间包括:在本地内存中获取与目标长连接绑定的目标句柄,其中,目标句柄为目标长连接建立时,服务端为目标长连接创建的;通过目标句柄确定目标长连接的配置参数的存储扇区;修改存储扇区中的目标数据,以延长目标长连接的过期时间。
本申请实施例中,句柄(Handle)是一个是用来标识对象或者项目的标识符,数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针,当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。因此本申请通过调用目标长连接的目标句柄,对目标长连接的配置参数的存储扇区进行数据修改,从而延长目标长连接的过期时间。
可选地,在由服务端中的目标进程执行客户端的即时通讯服务任务的情况下,所述方法还包括按照如下方式对客户端的状态进行更新:获取目标进程;检测目标进程的运行状态;在目标进程处于异常状态的情况下,检测目标句柄的操作状态;在目标句柄处于无操作对象状态的情况下,将客户端的状态确定为离线状态。
本申请实施例中,若执行客户端的即时通讯服务任务的目标进程出现异常,如数据阻塞、甚至结束进程的情况下,此时即时通讯服务已停止,为了明确是否目标长连接是否还可用,需要检测该目标句柄的操作状态。若目标句柄处于有操作对象的状态,则服务端可以重启该目标进程,或者新建进程,调用目标句柄继续维护目标长连接,从而重新提供即时通讯服务。若目标句柄处于无操作对象的状态,则服务端确定客户端已离线。
可选地,在由服务端的子服务端执行客户端的即时通讯服务任务的情况下,所述方法还包括按照如下方式对客户端的状态进行更新:检测子服务端的运行状态;在子服务端处于宕机状态的情况下,将客户端的状态确定为离线状态。
本申请实施例中,服务端可以是集群式服务器,可以是主服务器+分布式从服务器的主从式服务器。若执行客户端的即时通讯服务任务的子服务端出现异常,如宕机、异常关机等情况下,此时即时通讯服务已停止,主服务端需要清除该子服务端维护的长连接,并把该子服务端连接的所有客户端确定为离线状态。
可选地,目标分布式缓存还用于同步记录其他客户端的连接状态,在其他客户端对应的长连接的过期时间内未接收到心跳数据包的情况下,所述方法还包括:将其他客户端在第一目标分布式缓存上记录的在线状态更新为离线状态。
本申请实施例中,分布式缓存作为服务端内存的第二存储时,可以同步记录多个客户端的连接状态。当其中的一个或多个客户端未在长连接的过期时间内发送心跳数据包,则服务端将对应的客户端更新为离线状态。
本申请实施例中,上述主服务端需要清除该子服务端维护的长连接,包括对该子服务端的第一目标分布式缓存中记录的客户端状态进行更新,如子服务端的ip为192.168.1.1,那么长连接登录至子服务端的客户端,在子服务端的第一目标分布式缓存中,都记录了客户端id+子服务端ip的信息,但当子服务端突然宕机时,在子服务端的第一目标分布式缓存中的连接数据依然存在,主服务端需要删除子服务端的第一目标分布式缓存中与ip192.168.1.1相关的数据信息。
可选地,将客户端的状态确定为离线状态之后,所述方法还包括:通过目标句柄断开目标长连接;删除目标句柄,并释放目标句柄关联的内存资源。
本申请实施例中,确定客户端已经离线之后,服务端需要将目标长连接断开,从而释放为该目标长连接分配的内存资源。目标长连接作为目标句柄的操作对象,可以通过调用目标句柄将目标长连接断开,之后服务端删除失去绑定的目标句柄,从而释放目标句柄关联的内存资源。
可选地,通过目标句柄断开目标长连接之前,所述方法还包括按照如下方式为目标长连接创建目标句柄:从目标长连接的配置参数中提取出硬件识别标识和连接识别标识,其中,硬件识别标识用于识别客户端的硬件设备,任意两个长连接的连接识别标识不同;创建与硬件识别标识和连接识别标识均关联的目标句柄。
本申请实施例中,接入服务端接受即时通讯服务的客户端有唯一的硬件识别标识,客户端与服务端之间的长连接分配有唯一的连接识别标识,本申请将为目标长连接创建的目标句柄与该硬件识别标识、连接识别标识都进行关联,从而使得目标句柄的使用能够指向唯一的长连接对象。
可选地,通过目标句柄断开目标长连接包括:在目标句柄关联的硬件识别标识和连接识别标识与目标长连接配置参数的标识信息均一致的情况下,断开目标长连接。
在弱网、闪断、重连等情况下,服务端对分布式缓存的操作可能出现乱序的情况,如在一个连接断开时,服务端要执行连接的删除操作step1,紧接着,又重新触发了连接的建立step2,期待的程序步骤为step1、step2,而实际在执行的过程中,可能是step2、step1,因此会将最新建立的连接给删除,旧的连接没有删除,而产生误删的影响。
本申请实施例中,由于目标句柄与该硬件识别标识、连接识别标识都进行关联,因此目标句柄的使用能够指向唯一的长连接对象,即硬件识别标识和连接识别标识均与被操作的长连接的硬件识别标识和连接识别标识一致的情况下,才执行操作,避免了由于弱网、闪断、重连等情况下出现的操作步骤乱序的情况。
可选地,回收第二目标分布式缓存之前,所述方法还包括:从第二目标分布式缓存中提取出目标长连接上产生的所有消息数据;将消息数据与客户端的识别标识映射存储在数据库中。
可选地,回收第二目标分布式缓存之后,所述方法还包括:在客户端与服务端建立了新的长连接,且客户端本地存储的消息数据已经同步至客户端当前的会话界面的情况下,从数据库中将与识别标识映射存储的至少一部分消息数据同步至客户端当前的会话界面。
本申请实施例中,长连接保持过程中所有客户端的即时通讯消息都存储在第二目标分布式缓存上,当客户端离线时,服务端可以从第二目标分布式缓存中提取数据存储在服务端的后端数据库,与客户端的识别标识映射存储。从而在该客户端通过新的长连接再次使用即时通讯服务,且客户端本地存储的消息数据已经同步至客户端当前的会话界面时,服务端可以从数据库中根据客户端的识别标识提取出存在的消息数据,同步至客户端的当前的会话界面中。该客户端的识别标识可以是上述硬件识别标识,从用户使用的硬件设备来区分客户端,可以是用户帐号的识别标识,从登录用户来却分客户端,还可以是二者的结合。
根据本申请实施例的又一方面,如图3所示,提供了一种即时通讯的客户端状态更新装置,包括:
接收模块301,用于通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息;
在线更新模块303,用于若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态;
离线更新模块305,用于在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。
需要说明的是,该实施例中的接收模块301可以用于执行本申请实施例中的步骤S202,该实施例中的在线更新模块303可以用于执行本申请实施例中的步骤S204,该实施例中的离线更新模块305可以用于执行本申请实施例中的步骤S206。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。
可选地,服务端为目标长连接分配有第二目标分布式缓存,用于存储目标长连接上产生的消息;该即时通讯的客户端状态更新装置,还包括缓存回收模块,用于:
在预设时间内未接收到心跳数据包的情况下,回收第二目标分布式缓存,以使第二目标分布式缓存处于可分配状态。
可选地,该在线更新模块,具体用于按照以下方式中的其中之一在服务端本机内存中将客户端的状态确定为在线状态:延长在服务端的本地内存中存储的目标过期时间,其中,目标过期时间为目标长连接的过期时间;重置服务端的本地内存中的目标计时器,以重新开始目标长连接的离线倒计时。
可选地,该在线更新模块,还用于:在本地内存中获取与目标长连接绑定的目标句柄,其中,目标句柄为目标长连接建立时,服务端为目标长连接创建的;通过目标句柄确定目标长连接的配置参数的存储扇区;修改存储扇区中的目标数据,以延长目标长连接的过期时间。
可选地,该离线更新模块,还用于在由服务端中的目标进程执行客户端的即时通讯服务任务的情况下,按照如下方式对客户端的状态进行更新:获取目标进程;检测目标进程的运行状态;在目标进程处于异常状态的情况下,检测目标句柄的操作状态;在目标句柄处于无操作对象状态的情况下,将客户端的状态确定为离线状态。
可选地,该离线更新模块,还用于在由服务端的子服务端执行客户端的即时通讯服务任务的情况下,按照如下方式对客户端的状态进行更新:检测子服务端的运行状态;在子服务端处于宕机状态的情况下,将客户端的状态确定为离线状态。
可选地,目标分布式缓存还用于同步记录其他客户端的连接状态,该离线更新模块,还用于在其他客户端对应的长连接的过期时间内未接收到心跳数据包的情况下,将其他客户端在第一目标分布式缓存上记录的在线状态更新为离线状态。
可选地,该离线更新模块,还用于:通过目标句柄断开目标长连接;删除目标句柄,并释放目标句柄关联的内存资源。
可选地,该即时通讯的客户端状态更新装置,还包括句柄创建模块,用于在通过目标句柄断开目标长连接之前,按照如下方式为目标长连接创建目标句柄:从目标长连接的配置参数中提取出硬件识别标识和连接识别标识,其中,硬件识别标识用于识别客户端的硬件设备,任意两个长连接的连接识别标识不同;创建与硬件识别标识和连接识别标识均关联的目标句柄。
可选地,该离线更新模块,还用于:在目标句柄关联的硬件识别标识和连接识别标识与目标长连接配置参数的标识信息均一致的情况下,断开目标长连接。
可选地,该即时通讯的客户端状态更新装置,还包括消息存储模块,用于在回收第二目标分布式缓存之前,从第二目标分布式缓存中提取出目标长连接上产生的所有消息数据;将消息数据与客户端的识别标识映射存储在数据库中。
可选地,该即时通讯的客户端状态更新装置,还包括消息同步模块,用于在回收第二目标分布式缓存之后,在客户端与服务端建立了新的长连接,且客户端本地存储的消息数据已经同步至客户端当前的会话界面的情况下,从数据库中将与识别标识映射存储的至少一部分消息数据同步至客户端当前的会话界面。
根据本申请实施例的另一方面,本申请提供了一种电子设备,如图4所示,包括存储器401、处理器403、通信接口405及通信总线407,存储器401中存储有可在处理器403上运行的计算机程序,存储器401、处理器403通过通信接口405和通信总线407进行通信,处理器403执行计算机程序时实现上述方法的步骤。
上述电子设备中的存储器、处理器通过通信总线和通信接口进行通信。所述通信总线可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
根据本申请实施例的又一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一实施例的步骤。
可选地,在本申请实施例中,计算机可读介质被设置为存储用于所述处理器执行以下步骤的程序代码:
通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与目标长连接对应的连接记录,其中,目标长连接用于服务端为客户端提供即时通讯服务,服务端具有第一目标分布式缓存,用于存储目标长连接的连接状态信息;
若存在连接记录,在服务端本机内存中将客户端的状态确定为在线状态;
在预设时间内未接收到心跳数据包的情况下,将客户端的状态确定为离线状态,并删除服务端本地内存中的连接记录,以及删除第一目标分布式缓存中目标长连接的连接状态信息。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本申请实施例在具体实现时,可以参阅上述各个实施例,具有相应的技术效果。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (12)
1.一种即时通讯的客户端状态更新方法,其特征在于,包括:
通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与所述目标长连接对应的连接记录,其中,所述目标长连接用于所述服务端为所述客户端提供即时通讯服务,所述服务端具有第一目标分布式缓存,用于存储所述目标长连接的连接状态信息;
若存在所述连接记录,在服务端本机内存中将所述客户端的状态确定为在线状态;
在预设时间内未接收到所述心跳数据包的情况下,将所述客户端的状态确定为离线状态,并删除所述服务端本地内存中的所述连接记录,以及删除所述第一目标分布式缓存中所述目标长连接的连接状态信息。
2.根据权利要求1所述的方法,其特征在于,所述服务端为所述目标长连接分配有第二目标分布式缓存,用于存储所述目标长连接上产生的消息,所述方法还包括:
在预设时间内未接收到所述心跳数据包的情况下,回收所述第二目标分布式缓存,以使所述第二目标分布式缓存处于可分配状态。
3.根据权利要求1所述的方法,其特征在于,在服务端本机内存中将所述客户端的状态确定为在线状态包括以下其中之一:
延长在所述服务端的所述本地内存中存储的目标过期时间,其中,所述目标过期时间为目标长连接的过期时间;
重置所述服务端的所述本地内存中的目标计时器,以重新开始所述目标长连接的离线倒计时。
4.根据权利要求3所述的方法,其特征在于,延长在服务端本地内存中存储的目标过期时间包括:
在所述本地内存中获取与所述目标长连接绑定的目标句柄,其中,所述目标句柄为所述目标长连接建立时,所述服务端为所述目标长连接创建的;
通过所述目标句柄确定所述目标长连接的配置参数的存储扇区;
修改所述存储扇区中的目标数据,以延长所述目标长连接的所述过期时间。
5.根据权利要求4所述的方法,其特征在于,
在由所述服务端中的目标进程执行所述客户端的即时通讯服务任务的情况下,所述方法还包括按照如下方式对所述客户端的状态进行更新:获取所述目标进程;检测所述目标进程的运行状态;在所述目标进程处于异常状态的情况下,检测所述目标句柄的操作状态;在所述目标句柄处于无操作对象状态的情况下,将所述客户端的状态确定为离线状态;
在由所述服务端的子服务端执行所述客户端的即时通讯服务任务的情况下,所述方法还包括按照如下方式对所述客户端的状态进行更新:检测所述子服务端的运行状态;在所述子服务端处于宕机状态的情况下,将所述客户端的状态确定为离线状态。
6.根据权利要求5所述的方法,其特征在于,所述目标分布式缓存还用于同步记录其他客户端的连接状态,在所述其他客户端对应的长连接的过期时间内未接收到心跳数据包的情况下,所述方法还包括:
将所述其他客户端在所述第一目标分布式缓存上记录的在线状态更新为离线状态。
7.根据权利要求4至6任一所述的方法,其特征在于,将所述客户端的状态确定为离线状态之后,所述方法还包括:
通过所述目标句柄断开所述目标长连接;
删除所述目标句柄,并释放所述目标句柄关联的内存资源。
8.根据权利要求7所述的方法,其特征在于,
通过所述目标句柄断开所述目标长连接之前,所述方法还包括按照如下方式为所述目标长连接创建所述目标句柄:从所述目标长连接的配置参数中提取出硬件识别标识和连接识别标识,其中,所述硬件识别标识用于识别所述客户端的硬件设备,任意两个长连接的所述连接识别标识不同;创建与所述硬件识别标识和所述连接识别标识均关联的所述目标句柄;
通过所述目标句柄断开所述目标长连接包括:在所述目标句柄关联的所述硬件识别标识和所述连接识别标识与所述目标长连接配置参数的标识信息均一致的情况下,断开所述目标长连接。
9.根据权利要求2所述的方法,其特征在于,
回收所述第二目标分布式缓存之前,所述方法还包括:从所述第二目标分布式缓存中提取出所述目标长连接上产生的所有消息数据;将所述消息数据与所述客户端的识别标识映射存储在数据库中;
回收所述第二目标分布式缓存之后,所述方法还包括:在所述客户端与所述服务端建立了新的长连接,且所述客户端本地存储的消息数据已经同步至所述客户端当前的会话界面的情况下,从所述数据库中将与所述识别标识映射存储的至少一部分所述消息数据同步至所述客户端当前的会话界面。
10.一种即时通讯的客户端状态更新装置,其特征在于,包括:
接收模块,用于通过目标长连接接收客户端发送的心跳数据包,并判断服务端本地内存是否存在与所述目标长连接对应的连接记录,其中,所述目标长连接用于所述服务端为所述客户端提供即时通讯服务,所述服务端具有第一目标分布式缓存,用于存储所述目标长连接的连接状态信息;
在线更新模块,用于若存在所述连接记录,在服务端本机内存中将所述客户端的状态确定为在线状态;
离线更新模块,用于在预设时间内未接收到所述心跳数据包的情况下,将所述客户端的状态确定为离线状态,并删除所述服务端本地内存中的所述连接记录,以及删除所述第一目标分布式缓存中所述目标长连接的连接状态信息。
11.一种电子设备,包括存储器、处理器、通信接口及通信总线,所述存储器中存储有可在所述处理器上运行的计算机程序,所述存储器、所述处理器通过所述通信总线和所述通信接口进行通信,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至9任一项所述的方法的步骤。
12.一种具有处理器可执行的非易失的程序代码的计算机可读介质,其特征在于,所述程序代码使所述处理器执行所述权利要求1至9任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111160477.2A CN113905005B (zh) | 2021-09-30 | 2021-09-30 | 即时通讯的客户端状态更新方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111160477.2A CN113905005B (zh) | 2021-09-30 | 2021-09-30 | 即时通讯的客户端状态更新方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113905005A true CN113905005A (zh) | 2022-01-07 |
CN113905005B CN113905005B (zh) | 2023-05-23 |
Family
ID=79189762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111160477.2A Active CN113905005B (zh) | 2021-09-30 | 2021-09-30 | 即时通讯的客户端状态更新方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113905005B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422428A (zh) * | 2022-01-13 | 2022-04-29 | 挂号网(杭州)科技有限公司 | 服务节点的重启方法、装置、电子设备及存储介质 |
CN114697377A (zh) * | 2022-04-07 | 2022-07-01 | 深信服科技股份有限公司 | 一种客户端产品的保活方法、系统、装置及可读存储介质 |
CN114866594A (zh) * | 2022-04-24 | 2022-08-05 | 普联技术有限公司 | 设备连接管理方法、装置、系统、服务器及可读存储介质 |
CN115334144A (zh) * | 2022-06-29 | 2022-11-11 | 上海万物新生环保科技集团有限公司 | 一种业务状态变更通知的处理方法、装置及系统 |
CN116760697A (zh) * | 2023-07-11 | 2023-09-15 | 北京安帝科技有限公司 | 网络设备风险监测方法、计算机设备和计算机存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6549917B1 (en) * | 1999-04-29 | 2003-04-15 | Waveware Communications, Inc. | Synchronization of host computers and handheld remote computers |
CN104767775A (zh) * | 2014-01-06 | 2015-07-08 | 腾讯科技(深圳)有限公司 | 网页应用消息推送方法及系统 |
CN105610888A (zh) * | 2015-09-08 | 2016-05-25 | 华南师范大学 | 基于安卓的利用socket推送消息的方法和系统 |
CN106961364A (zh) * | 2017-04-24 | 2017-07-18 | 努比亚技术有限公司 | 心跳检测方法及应用服务器 |
CN109547511A (zh) * | 2017-09-22 | 2019-03-29 | 中国移动通信集团浙江有限公司 | 一种web消息实时推送方法、服务器、客户端及系统 |
CN110430238A (zh) * | 2019-07-05 | 2019-11-08 | 中国平安财产保险股份有限公司 | 长连接管理方法、装置、设备及计算机可读存储介质 |
CN110572443A (zh) * | 2019-08-22 | 2019-12-13 | 厦门网宿有限公司 | 长连接状态更新方法、服务端、服务器及存储介质 |
CN113132487A (zh) * | 2021-04-21 | 2021-07-16 | 深圳市乐唯科技开发有限公司 | 一种精简的分布式长连接的数据传输方法及系统 |
CN113411237A (zh) * | 2021-08-18 | 2021-09-17 | 成都丰硕智能数字科技有限公司 | 一种低延迟检测终端状态的方法、存储介质及系统 |
-
2021
- 2021-09-30 CN CN202111160477.2A patent/CN113905005B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6549917B1 (en) * | 1999-04-29 | 2003-04-15 | Waveware Communications, Inc. | Synchronization of host computers and handheld remote computers |
CN104767775A (zh) * | 2014-01-06 | 2015-07-08 | 腾讯科技(深圳)有限公司 | 网页应用消息推送方法及系统 |
US20160337462A1 (en) * | 2014-01-06 | 2016-11-17 | Tencent Technology (Shenzhen) Company Limited | Method and system for pushing web application message |
CN105610888A (zh) * | 2015-09-08 | 2016-05-25 | 华南师范大学 | 基于安卓的利用socket推送消息的方法和系统 |
CN106961364A (zh) * | 2017-04-24 | 2017-07-18 | 努比亚技术有限公司 | 心跳检测方法及应用服务器 |
CN109547511A (zh) * | 2017-09-22 | 2019-03-29 | 中国移动通信集团浙江有限公司 | 一种web消息实时推送方法、服务器、客户端及系统 |
CN110430238A (zh) * | 2019-07-05 | 2019-11-08 | 中国平安财产保险股份有限公司 | 长连接管理方法、装置、设备及计算机可读存储介质 |
CN110572443A (zh) * | 2019-08-22 | 2019-12-13 | 厦门网宿有限公司 | 长连接状态更新方法、服务端、服务器及存储介质 |
CN113132487A (zh) * | 2021-04-21 | 2021-07-16 | 深圳市乐唯科技开发有限公司 | 一种精简的分布式长连接的数据传输方法及系统 |
CN113411237A (zh) * | 2021-08-18 | 2021-09-17 | 成都丰硕智能数字科技有限公司 | 一种低延迟检测终端状态的方法、存储介质及系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422428A (zh) * | 2022-01-13 | 2022-04-29 | 挂号网(杭州)科技有限公司 | 服务节点的重启方法、装置、电子设备及存储介质 |
CN114697377A (zh) * | 2022-04-07 | 2022-07-01 | 深信服科技股份有限公司 | 一种客户端产品的保活方法、系统、装置及可读存储介质 |
CN114697377B (zh) * | 2022-04-07 | 2023-09-05 | 深信服科技股份有限公司 | 一种客户端产品的保活方法、系统、装置及可读存储介质 |
CN114866594A (zh) * | 2022-04-24 | 2022-08-05 | 普联技术有限公司 | 设备连接管理方法、装置、系统、服务器及可读存储介质 |
CN114866594B (zh) * | 2022-04-24 | 2023-08-08 | 普联技术有限公司 | 设备连接管理方法、装置、系统、服务器及可读存储介质 |
CN115334144A (zh) * | 2022-06-29 | 2022-11-11 | 上海万物新生环保科技集团有限公司 | 一种业务状态变更通知的处理方法、装置及系统 |
CN116760697A (zh) * | 2023-07-11 | 2023-09-15 | 北京安帝科技有限公司 | 网络设备风险监测方法、计算机设备和计算机存储介质 |
CN116760697B (zh) * | 2023-07-11 | 2023-12-08 | 北京安帝科技有限公司 | 网络设备风险监测方法、计算机设备和计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113905005B (zh) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113905005B (zh) | 即时通讯的客户端状态更新方法和装置 | |
CN106331098B (zh) | 一种服务器集群系统 | |
EP3490224A1 (en) | Data synchronization method and system | |
CN106598633B (zh) | 配置文件的更新方法、客户端及服务器 | |
CN110830283B (zh) | 故障检测方法、装置、设备和系统 | |
CN106453657A (zh) | 智能家居设备的状态信息更新方法及装置 | |
US20170214751A1 (en) | Migrating a chat message service provided by a chat server to a new chat server | |
CN107404509B (zh) | 分布式服务配置系统及信息管理方法 | |
CN112506702B (zh) | 数据中心容灾方法、装置、设备及存储介质 | |
US20100088300A1 (en) | Resource tracking | |
CN111752488B (zh) | 存储集群的管理方法、装置、管理节点及存储介质 | |
CN111064626A (zh) | 配置更新方法、装置、服务器及可读存储介质 | |
CN110881055A (zh) | 基于Redis的微服务处理方法和设备 | |
EP3197207A1 (en) | Method for managing application resources and registered node in m2m | |
EP3570169B1 (en) | Method and system for processing device failure | |
WO2017080362A1 (zh) | 数据管理方法及装置 | |
KR20040075222A (ko) | 무선 프로토콜을 위한 프로시쥬어 수행방법 | |
CN111614702B (zh) | 一种边缘计算方法以及边缘计算系统 | |
CN107087021B (zh) | 主从服务器确定方法及装置 | |
CN115314361A (zh) | 一种服务器集群管理方法及其相关组件 | |
CN104468767A (zh) | 一种云存储数据冲突检测方法及系统 | |
CN110958287A (zh) | 操作对象数据同步方法、装置及系统 | |
JP6374362B2 (ja) | 呼処理装置、セッション復旧方法及び呼処理サーバプログラム | |
KR20160026138A (ko) | 클라우드 데이터 시스템의 급속 동기화 방법 및 그를 이용한 클라우드 데이터 시스템 | |
CN114090342A (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 |