一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

设备连接管理方法、装置、系统、服务器及可读存储介质与流程

2022-08-10 14:52:54 来源:中国专利 TAG:


1.本技术属于物联网技术领域,尤其涉及一种设备连接管理方法、装置、系统、服务器及可读存储介质。


背景技术:

2.随着物联网技术的发展,人们对物联网通信质量的要求也逐渐提高。客户端与服务端通过长连接方式建立通信通道,保持客户端与服务端通信连接的畅通和稳定。
3.目前,随着客户端与服务端通信连接数量的增加,服务端采用分布式集群的方式,维持所有设备的通信连接;在传统分布式集群中,进行消息推送时,需要将消息广播至集群中的所有主机,从而导致服务端及网络资源的浪费。


技术实现要素:

4.本技术实施例提供了一种设备连接管理方法、装置、系统、服务器及可读存储介质,可以改善在执行任务消息地推送时造成的服务端及网络资源浪费的问题。
5.第一方面,本技术提供了一种设备连接管理方法,应用于第一服务器,该方法可以包括:
6.与设备建立连接后,查询第一存储区中与所述设备对应的映射关系;
7.若查询结果为空值,则将与所述设备连接的映射关系存储在所述第一存储区;
8.若查询结果为所述设备与第二服务器连接的映射关系,则向所述第二服务器发送断开连接请求,并在所述第二服务器删除所述第一存储区中所述设备与所述第二服务器连接的映射关系后,将与所述设备连接的映射关系写入所述第一存储区;
9.其中,所述断开连接用于指示所述第二服务器断开与所述设备的连接,并在连接断开后,所述第二服务器确定与所述设备连接的映射关系满足删除条件时,删除所述第一存储区中所述设备与所述第二服务器连接的映射关系。
10.示例性的,第一存储区可以为服务器集群的基于键值对形式存储的数据库。第二服务器为服务器集群中除第一服务器之外的任一个服务节点。
11.示例性的,该删除条件包括:第二服务器获取的所述第一存储区中与所述设备对应的映射关系与所述第二服务器存储的连接信息相匹配。
12.在第一方面的一种可能的实现方式中,在所述将与所述设备连接的映射关系写入所述第一存储区之后,所述方法还包括:
13.在检测到与所述设备的连接断开时,获取所述第一存储区中与所述设备对应的映射关系;
14.若获取到的所述第一存储区的映射关系与第二存储区的连接信息相匹配,则删除所述第一存储区的映射关系;其中,所述第二存储区的连接信息为所述第一服务器与设备建立连接时缓存的信息。
15.示例性的,第二存储区的连接信息可以为第一服务器中缓存的连接上下文信息。
16.在第一方面的一种可能的实现方式中,在所述将与所述设备连接的映射关系写入第一存储区之后,所述方法还包括:
17.接收第二服务器发送的断开连接请求,所述断开连接请求为所述第二服务器与所述设备建立连接并在所述第一存储区中查询到所述设备与所述第一服务器连接的映射关系时生成的;
18.基于所述断开连接请求,断开与所述设备的连接,并在连接断开后获取所述第一存储区中与所述设备对应的映射关系;
19.若获取到的所述第一存储区的映射关系与第二存储区的连接信息相匹配,则删除所述第一存储区的映射关系。
20.示例性的,第二服务器为服务器集群中除第一服务器之外的任一个服务节点。
21.在第一方面的一种可能的实现方式中,与所述设备连接的映射关系包括连接标识;
22.所述若获取到的所述第一存储区的映射关系与第二存储区的连接信息相匹配,则删除所述第一存储区的映射关系,包括:
23.若所述第一存储区的映射关系的连接标识与所述第二存储区的连接信息的连接标识相匹配,则删除所述第一存储区的映射关系。
24.示例性的,该映射关系可以为设备信息与服务器节点信息、连接标识的对应关系,该映射关系可以通过键值对形式表示;该连接信息可以包括设备标识和连接标识;该连接标识可以为建立连接时的时间戳或线程标识符;第一存储区的映射关系与第二存储区的连接信息相匹配还包括:映射关系中的服务器节点信息、连接标识与连接信息中的服务器节点信息、连接标识分别相匹配,或者映射关系中的连接标识与连接信息中的连接标识相匹配;连接标识相匹配包括:时间戳或线程标识符相同。
25.在第一方面的一种可能的实现方式中,在所述获取所述第一存储区中与所述设备对应的映射关系之后,所述方法还包括:
26.若所述第一存储区的映射关系的连接标识与所述第二存储区的连接信息的连接标识不匹配,则不删除所述第一存储区的映射关系;
27.其中,所述第一存储区的映射关系与所述第二存储区的连接信息分别为所述第一服务器与所述设备在不同线程或时间建立连接时生成的。
28.示例性的,该连接标识可以为建立连接时的时间戳或线程标识符;第一存储区的映射关系与第二存储区的连接信息不匹配还包括:两个映射关系中的服务器节点信息相同且连接标识不匹配;连接标识不匹配包括时间戳或线程标识符不同。
29.在第一方面的一种可能的实现方式中,在所述将与所述设备连接的映射关系写入第一存储区中之后,所述方法还包括:
30.在获取到任务消息时,将所述任务消息发送至连接的所述设备;
31.其中,所述任务消息为服务器集群基于所述第一存储区中与所述设备对应的映射关系向所述第一服务器推送的,所述服务器集群包括所述第一服务器,所述第一存储区为所述服务器集群对应的存储区,所述第二存储区为所述第一服务器的存储区。
32.第二方面,本技术实施例提供了一种设备连接管理装置,该装置可以包括:
33.查询单元,用于与设备建立连接后,查询第一存储区中与所述设备对应的映射关
系;
34.处理单元,用于若查询结果为空值,则将与所述设备连接的映射关系存储在所述第一存储区;若查询结果为所述设备与第二服务器连接的映射关系,则向所述第二服务器发送断开连接请求,并在所述第二服务器删除所述第一存储区中所述设备与所述第二服务器连接的映射关系后,将与所述设备连接的映射关系写入所述第一存储区;其中,所述断开连接请求用于指示所述第二服务器断开与所述设备的连接,并在连接断开后,所述第二服务器确定与所述设备连接的映射关系满足删除条件时,删除所述第一存储区中所述设备与所述第二服务器连接的映射关系。
35.第三方面,本技术提供了一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面所述的方法。
36.第四方面,本技术提供了一种设备连接管理系统,包括服务器集群、第一存储区以及控制服务模块;所述服务器集群包括第三方面所述的服务器;所述第一存储区用于存储所述服务器与设备连接的映射关系;所述控制服务模块用于在推送任务消息时,读取所述第一存储区中与所述设备对应的映射关系,并根据所述映射关系将所述任务消息推送至所述服务器集群中与所述设备连接的服务器。
37.第五方面,本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的方法。
38.第六方面,本技术实施例提供了一种计算机程序产品,当计算机程序产品在服务器上运行时,使得服务器执行上述第一方面所述的方法。
39.可以理解的是,上述第二方面至第六方面的有益效果可以参见第一方面中的相关描述,在此不再赘述。
40.本技术与现有技术相比存在的有益效果是:本技术中在设备与服务器建立连接后,通过查询第一存储区是否存在与设备对应的映射关系,若无则将服务器与设备此次连接的映射关系写入第一存储区,若有设备与其他服务器连接的映射关系则删除设备与其他服务器连接的映射关系后将与设备此次连接的映射关系写入第一存储区,保证第一存储区中只保存设备唯一对应的连接关系,确保第一存储区中的映射关系为设备与服务节点一一对应连接的关系,从而可以基于该唯一对应的连接关系,在服务器集群进行任务消息地推送时,基于第一存储区的映射关系只向与设备连接的服务器推送即可,无需再进行广播推送至服务器集群中所有的服务器;尤其是在服务器集群规模较大时,改善了任务消息推送时造成的服务器及网络资源浪费的问题,大大提高了推送任务消息的效率;具有较强的易用性与实用性。
附图说明
41.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
42.图1是本技术实施例提供的连接管理系统的架构示意图;
43.图2是本技术实施例提供的设备连接管理方法的实现流程示意图;
44.图3是本技术实施例提供的服务器写入映射关系的完整交互流程示意图;
45.图4是本技术实施例提供的服务器与设备连接与断开的交互流程示意图;
46.图5是本技术实施例提供的服务器不同线程与设备连接的交互流程示意图;
47.图6是本技术实施例提供的服务器与设备先后连接的交互流程示意图;
48.图7是本技术实施例提供的设备连接管理装置的结构示意图;
49.图8是本技术实施例提供的服务器的结构示意图。
具体实施方式
50.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。
51.应当理解,当在本技术说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
52.还应当理解,在本技术说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
53.如在本技术说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0054]
另外,在本技术说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0055]
在本技术说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
[0056]
在物联网设备与服务器建立长连接的场景,当连接数量较少、规模较小时,对连接的管理,可以采用单机存储的方式,通过服务端的单台主机管理设备连接;随着连接数量的增加,单台主机所容纳的连接数量有限,则需要分布式的服务器集群来维持所有的设备连接。而传统的分布式服务器集群中,在进行消息推送时,需要将消息广播至服务器集群中的所有主机,从而造成资源浪费、增加成本的问题;并且在进行服务器集群规模的扩展时,资源浪费的问题则更加严重。
[0057]
基于上述问题,本技术实施例提供了一种设备连接管理方法,通过构建分布式的连接管理系统,保证设备与服务节点的连接在整个集群中的唯一对应关系,在进行消息推送时,基于唯一对应关系进行定向推送,无需再广播至所有主机,实现资源的节约且安全、
高效地处理消息推送的请求。
[0058]
请参见图1,图1为本技术实施例提供的连接管理系统的架构示意图。如图1所示,该分布式的设备连接管理系统可以包括负载均衡服务模块、服务器集群、第一存储区以及控制服务模块。其中,负载均衡模块负责分配服务器集群中的各个服务器节点的负载,均衡优化服务器节点资源的使用,避免过载;服务器集群中包括分布式的多个服务器节点;第一存储区为该设备连接管理系统中存储设备与服务器节点连接的映射关系的存储区,例如可以为redis数据库的缓存区;每个服务器节点在与设备建立唯一对应的连接后,在第一缓存区无与设备对应的映射关系时,可以将该连接的映射关系写入该第一存储区,当第一缓存区中包括设备与其他服务器连接的映射关系时,删除第一存储区中设备与其他服务器连接的映射关系,从而保证第一缓存区中保存设备与服务器节点的唯一对应连接的关系。
[0059]
示例性的,当控制服务模块需要向服务器节点推送任务消息时,可以先读取第一存储区中与设备对应的映射关系,根据该映射关系中的服务器节点信息,向与设备连接的服务器节点推送该任务消息,从而只针对与设备连接的服务器节点进行推送,无需广播至服务器集群中所有的服务器节点,节省服务器资源,提高数据推送效率。
[0060]
示例性的,映射关系实际保存的键key为设备标识deviceid,值value为一个map,内含服务器节点ip和连接建立的连接标识(例如时间戳等)。该设备连接管理系统中,服务器集群内可以有任意多台主机,各服务器节点之间不需要知晓彼此的连接情况,新建的设备连接对应的设备标识deviceid与服务器节点ip的映射关系保存至redis,以最新写入的服务器节点ip为准,在写入前如读到另一服务器节点ip,则发送请求通知另一服务器节点将连接断开,然后将本服务器节点ip与设备连接的映射关系写入redis。控制服务模块读取redis中缓存的映射关系中服务器节点ip即可确定有效连接是否存在,以及基于所在的服务器节点ip地址,直接向对应ip地址的服务器节点发送透传命令。
[0061]
需要说明的是,本技术中所描述的设备与服务器的连接可以为基于物联网环境下建立的长连接。
[0062]
基于设备连接管理系统的架构,本技术实施例提供了一种设备连接管理方法。下面通过本技术实施例介绍该方法实现的具体过程。
[0063]
请参见图2,图2是本技术一实施例提设备连接管理方法的流程示意图。本方法的执行主体可以是图1中分布式服务器集群中的任一个服务器节点;如图2所示,该方法包括以下步骤:
[0064]
s201,第一服务器与设备建立连接后,查询第一存储区中与该设备对应的映射关系。
[0065]
在一些实施例中,第一服务器为服务器集群中的任一个服务器节点;与设备建立的连接可以为长连接;该设备可以是支持物联网传输的设备,例如智能家居等设备,在设备使用过程中,与服务器保持长连接,可以保证设备与服务器的通信畅通,实现消息的及时传输。设备可以向第一服务器发送上线的请求,服务器基于该请求对设备的有效性进行验证,验证通过后与设备建立连接。
[0066]
示例性的,第一存储区用于存储服务器与设备连接的映射关系。第一存储区为设备连接管理系统的存储区(与整个服务器结群对应),可以为服务器集群中的任一个服务器节点设置的具有预设数据结构的存储系统,或者设备管理系统中独立的数据库。例如该存
储区可以为基于键值对key-value形式的远程字典服务(remote dictionary server,redis)数据库;在高并发或者存在大量读数据的情况,使用redis作为缓存,存储每个设备与服务器唯一对应连接的映射关系,可以减轻数据库的压力,提高写入以及读取数据的效率。
[0067]
示例性的,第一服务器与设备建立连接后,还可以缓存本次连接对应的连接信息,该连接信息可以为缓存的连接上下文,从而在服务器的第二存储区记录本次连接对应的连接信息,第二存储区可以为服务器本地内部存储单元。在服务器中保存的连接信息可以记录为此次连接对应的连接上下文,该连接上下文可以包括设备标识deviceid、连接建立的时间戳timestamp以及长连接通信接口socket等;服务器中保存的连接上下文用于指示与设备连接的一一对应关系。
[0068]
在一些实施例中,为保证设备与服务器之间连接的唯一性,在第一服务器与设备建立连接后,需要先查询第一存储区中是否已存在与设备对应的映射关系。第一服务器根据设备标识,在第一存储区中查询与设备关联的映射关系。
[0069]
示例性的,为保证设备与服务器连接的唯一性,设备与服务器建立连接时,携带有唯一的设备标识id;在整个设备连接管理系统中,可以通过该设备标识id唯一定位到一个设备,从而基于该设备查询对应的映射关系。
[0070]
s202,若查询结果为空值,则将与该设备连接的映射关系存储在第一存储区。
[0071]
在一些实施例中,若第一存储区中没有与当前连接的设备相关联的映射关系,则查询结果为空值;例如第一服务器执行查询操作后得到的响应结果表示为“null”,则表示第一存储区中没有与该设备对应的映射关系;服务器集群中除第一服务器之外,没有其他服务器与设备连接。此时,可以将第一服务器与设备建立连接对应的映射关系写入第一存储区内。从而可以确保第一存储区内只保存服务器与设备的唯一对应连接的映射关系。
[0072]
示例性的,服务器与设备的映射关系可以为设备id与服务器的网际互连协议(internet protocol,ip)地址的映射关系;第一服务器生成该映射关系,并以键值对的形式写入第一存储区(redis)中;便于设备连接管理系统后续在进行任务消息推送时,基于设备标识更加安全、高效的读取第一存储区中的映射关系,从而可以根据映射关系向目标服务器推送任务消息,节省服务器资源,提高处理效率。
[0073]
s203,若查询结果为设备与第二服务器连接的映射关系,则第一服务器向第二服务器发送断开连接请求,并在第二服务器删除第一存储区中设备与第二服务器连接的映射关系后,将与设备连接的映射关系写入第一存储区。
[0074]
在一些实施例中,在第一服务器与设备建立连接之前,该设备可能还与服务器集群中的其他服务器建立连接,即第一存储区中存储有该设备与其他服务器连接的映射关系。为保证第一存储区中只保存设备与服务器唯一对应连接的映射关系,第一服务器可以通过有线或无线的方式向其他服务器发送断开连接请求,以通知其他服务器断开与该设备的连接;并在其他服务器断开与设备的连接后,判断从第一存储区获取到的映射关系是否满足删除条件,在满足删除条件时,删除第一存储区中与设备连接的映射关系。从而在第一服务器将与设备连接的映射关系写入第一存储区后,第一存储区中只保存有设备与服务器唯一对应连接的映射关系。
[0075]
示例性的,设备上线与服务器建立连接时,服务器生成建立连接时对应的连接标
识,并缓存为连接信息,例如连接上下文,连接标识可以包括时间戳或者线程标识。
[0076]
示例性的,断开连接请求用于指示第二服务器断开与设备的连接,并在连接断开后,第二服务器确定与设备连接的映射关系满足删除条件时,删除第一存储区中设备与第二服务器连接的映射关系。该删除条件包括:第二服务器在断开连接后从第一存储区中获取的与设备对应的映射关系与第二服务器存储的连接信息相匹配。在第二服务器接收到第一服务器发送的断开连接请求后,第二服务器断开与设备的连接,并在断开连接后获取第一存储区中与设备对应的映射关系,若获取的映射关系与第二服务器与设备建立连接时缓存的连接信息相匹配,满足删除条件,则第二服务器删除第一存储单元中设备与第二服务器连接的映射关系。
[0077]
在一些实施例中,在第一服务器将与设备连接的映射关系写入第一存储区之后,该方法还包括:
[0078]
接收第二服务器发送的断开连接请求,断开连接请求为第二服务器与设备建立连接并在第一存储区中查询到设备与第一服务器连接的映射关系时生成的;基于断开连接请求,断开与设备的连接,并在连接断开后获取第一存储区中与设备对应的映射关系;若获取到的第一存储区的映射关系与第二存储区的连接信息相匹配,则删除第一存储区的映射关系。
[0079]
示例性的,服务器与设备连接的映射关系为服务器ip与设备标识的对应关系,该映射关系中还包括连接标识,该连接标识可以为建立连接时的时间戳或线程标识符。服务器与设备建立连接时,还生成连接信息,该连接信息可以包括设备标识、连接标识;该连接标识可以包括建立连接时的时间戳或线程标识符。
[0080]
示例性的,第一服务器与设备建立连接时,在本地生成并保存了此次建立连接的连接信息,并将与设备连接的映射关系写入第一存储区。设备与其他服务器(例如第二服务器)建立连接,其他服务器获取到第一存储区中与设备对应的映射关系为第一服务器与设备连接的映射关系,则第一服务器还可以接收到其他服务器发送的断开连接的请求。此时,第一服务器基于该断开连接请求,断开与设备的连接,并在断开连接后获取第一存储区中设备对应的映射关系,该映射关系中的连接标识与本地存储的连接信息中的连接标识相同,则删除第一存储区中的与设备连接的映射关系。
[0081]
示例性的,第一服务器获取的第一存储区的映射关系与第一服务器同设备建立连接时缓存的连接信息相匹配包括:映射关系中的服务器节点信息、连接标识与连接信息中的服务器节点信息、连接标识分别相匹配,或者映射关系中的连接标识与连接信息中的连接标识相匹配;连接标识相匹配包括:时间戳或线程标识符相同。
[0082]
在一种应用场景中,请参见图3,图3是本技术实施例提供的服务器写入映射关系的完整交互流程示意图;如图3所示,当不同的服务器(例如服务器1和服务器2)与设备建立连接时,不同的服务器分别对第一存储区进行写入或读取操作时的流程图可以包括如下步骤:
[0083]
1、设备向服务器1发送上线请求。
[0084]
2、服务器1对设备的有效性进行验证,并在验证通过后与设备建立连接。
[0085]
示例性的,服务器1在与设备建立连接时,在本地的第二存储区记录本次的连接信息,该连接信息可以包括括服务器ip、设备标识和连接标识,该连接标识可以包括时间戳或
线程标识符。
[0086]
3、服务器1获取第一存储区中与设备对应的映射关系;若得到返回结果为空值则执行下一步。
[0087]
4、服务器1将设备与服务器1连接的映射关系1写入第一存储区;并得到返回成功的结果。
[0088]
5、服务器1向设备反馈写入成功的信息。
[0089]
6、设备向服务器2发送上线请求。
[0090]
7、服务器2对设备的有效性进行验证,并在验证通过后与设备建立连接。
[0091]
示例性的,服务器2在与设备建立连接时,在本地的第二存储区记录本次的连接信息,该连接信息可以包括括服务器ip、设备标识和连接标识,该连接表示可以包括时间戳或线程标识符。
[0092]
8、服务器2获取第一存储区中与设备对应的映射关系。
[0093]
9、服务器2得到第一存储区返回的设备与服务器1连接的映射关系1。
[0094]
10、服务器2向服务器1发送断开连接请求。
[0095]
11、服务器1基于断开连接请求,断开与设备的连接,并在连接断开后获取第一存储区中与设备对应的映射关系。
[0096]
12、服务器1得到第一存储区返回的服务器1与设备连接的映射关系1。
[0097]
13、服务器1对比映射关系1中的服务器ip、时间戳与本地缓存的连接信息中的服务器ip、时间戳相同,删除第一存储区中设备与服务器1连接的映射关系1;并得到第一存储区返回成功的消息;服务器1向服务器2返回成功的消息。
[0098]
14、服务器2在接收到服务器1返回成功的消息后,将设备与服务器2连接的映射关系2写入第一存储区;服务器2得到第一存储区返回成功的消息,并基于该映射关系2正常处理业务信息。
[0099]
需要说明的是,服务器中的cpu或gpu可以对设备连接管理系统的第一存储区(redis)进行控制,获取第一存储区的地址写入服务器与设备连接的映射关系;当需要删除已存储的映射关系时,基于设备的身份标识,确定与设备对应的映射关系的存储地址,删除该映射关系对应的数据。
[0100]
通过上述方式,在服务器与设备建立连接时,服务器生成此次连接的映射关系,并将该映射关系写入该设备连接管理系统的第一存储区;并基于设备id的唯一性,可以根据定位的唯一设备确定第一存储区中的设备与服务器唯一对应连接的映射关系,从而确定该映射关系中的目标服务器,以向该目标服务器定向推送任务消息等;减少服务器资源的浪费,提高消息处理的效率。
[0101]
在另一种应用场景中,针对设备的一次上线与离线的交互流程,在第一设备将与设备连接的映射关系写入第一存储区之后,该方法还包括:
[0102]
在第一设备检测到与设备的连接断开时,获取第一存储区中与设备对应的映射关系;若获取到的第一存储区的映射关系与第二存储区的连接信息相匹配,则删除第一存储区的映射关系。
[0103]
其中,第二存储区的连接信息为第一服务器与设备建立连接时缓存的信息。
[0104]
请参见图4,图4是本技术实施例提供的服务器与设备连接与断开的交互流程示意
图;如图4所示,对于同一台设备与一台服务器建立连接与断开的一次交互过程中,若没有出现冲突的设备上线与离线(如同一设备与多个服务器建立连接),设备一次上线与离线的整体交互流程可以包括如下步骤:
[0105]
1、设备向服务器发送上线请求。
[0106]
2、服务器基于上线请求对设备的有效性进行验证,验证通过与设备建立连接。
[0107]
3、服务器获取第一存储区中与设备对应的映射关系;得到第一存储区返回结果为空值。
[0108]
4、服务器将与设备连接的映射关系写入第一存储区;得到第一存储区返回成功的消息。
[0109]
5、服务器向设备反馈成功的消息。此时,服务器与设备连接正常,可以正常处理业务消息。
[0110]
6、服务器检测到与设备的连接断开。
[0111]
示例性的,设备与服务器的长连接在多种情况下可能断开,例如:设备主动向服务器发送fin/rst报文断开连接,或者连接中转的负载均衡模块断开连接,或者服务器判断报文格式错误连接传输出现故障时主动断开连接,或者连接心跳超时服务器判断连接失效主动断开连接等。在连接断开时(无论是何种原因导致的断开),为了便于设备其他服务器连接时写入映射关系以及保证redis中存储与设备唯一对应的映射关系,需删除映射关系缓存。
[0112]
7、服务器获取第一存储区中与设备对应的映射关系。
[0113]
8、服务器得到第一存储区返回的与设备连接的映射关系。
[0114]
9、服务器对比映射关系中的时间戳与本地缓存的连接信息中的时间戳相同;服务器删除与设备连接的映射关系;得到第一存储去返回成功的消息。
[0115]
通过上述方式,在设备的一次上线与离线的过程中,当设备与服务器断开连接时,删除第一存储区中该设备与该服务器连接的映射关系,从而确保设备上线与服务器集群中的服务器再次建立连接,写入映射关系时,避免出现冲突情况,提高写入、读取数据时第一存储区的响应效率以及节约服务器集群的资源利用。
[0116]
在另一种场景中,在第一服务器获取第一存储区中与设备对应的映射关系之后,该方法还包括:
[0117]
若第一存储区的映射关系的连接标识与第二存储区的连接信息的连接标识不匹配,则不删除第一存储区的映射关系。
[0118]
其中,第一存储区的映射关系与第二存储区的连接信息分别为第一服务器与设备在不同线程或时间建立连接时生成的。
[0119]
示例性的,第一服务器中存在很多并发的情况,相同的流程可能同时发生在同一服务器的不同线程,或者不同服务器之间;在各种情形下,需保证从redis中读到的设备标识deviceid与服务器ip的映射关系有效(即确实存在设备与该服务器ip的长连接)。
[0120]
进一步的,为保证不出现误删除,缓存的映射关系中需携带连接建立时的时间戳、线程标识或其他可以用于区分设备连接的映射关系的连接标识;同时,服务器内存中缓存的连接上下文,也需要保存连接建立时的时间戳、线程标识或与映射关系对应的其他连接标识。只有映射关系中的连接标识与连接上下文的连接标识相匹配时,才执行删除操作,避
免出现误删的情况。
[0121]
请参见图5,图5是本技术实施例提供的服务器不同线程与设备连接的交互流程示意图;如图5所示,相同的流程同时发生在同一服务器的不同线程时,该交互流程可以包括如下步骤:
[0122]
针对服务器的线程1:
[0123]
1、设备上线后,服务器对设备进行验证,验证通过,与设备建立连接并在本地记录建立连接的时间戳timestamp1或线程标识1。
[0124]
2、服务器获取第一存储区中与设备对应的映射关系;得到第一存储区返回结果为空值。
[0125]
3、服务器将线程1设备与服务器连接的映射关系1写入第一存储区;得到第一存储区返回成功的消息。
[0126]
针对服务器的线程2:
[0127]
4、设备上线后,服务器对设备进行验证,验证通过,与设备建立连接并在本地记录建立连接的时间戳timestamp2或线程标识2。
[0128]
5、服务器获取第一存储区中与设备对应的映射关系;得到第一存储区返回结果为空值的消息。
[0129]
6、服务器将线程2设备与服务器连接的映射关系2写入第一存储区;得到第一存储区返回成功的消息;并基于与设备的连接,向设备返回成功的消息。
[0130]
需要说明的是,线程1和线程2可以为同时并发执行的过程,在线程2中获取第一存储区中与设备对应的映射关系时,线程1中执行的操作还没写入设备与服务器连接的映射关系;因此,不同的线程均有可能得到第一存储区返回结果为空值的情况,此时针对不同的线程服务器均可写入与设备连接的映射关系。然而,当线程1中,服务器向设备反馈写入成功时,可能与设备的连接已断开;此时服务器在线程1继续执行如下步骤:
[0131]
7、获取第一存储区中与设备对应的映射关系;得到第一存储区返回在线程2设备与服务器连接的映射关系2。
[0132]
8、服务器对比映射关系2中的时间戳2与本地记录建立连接的时间戳timestamp1不同,或者映射关系2中的线程标识2与本地记录建立连接的线程标识1不同,则不删除第一存储区的映射关系2。从而避免对第一存储区的映射关系的误删,服务器在线程2基于与设备的连接可以正常处理业务消息。
[0133]
示例性的,若缓存的映射关系中无时间戳timestamp或线程标识符,只对比服务器ip与设备标识,则线程2写入的正常的映射关系的结果将会被误删,导致无法从redis中查到正确的映射关系;在映射关系中添加时间戳或线程标识符,能够确保写入的映射关系只会被服务器删除;服务器中针对每一个设备连接建立的上下文和设备连接一一对应,服务器在执行删除时,从本地的连接上下文合集中获取对应设备标识deviceid的上下文,并验证上下文中的时间戳timestamp或者线程标识符与映射关系中的是否相同,若不同则不删除;并且服务器仅在设备连接确实断开时,执行映射关系的删除操作。通过上述方式,可以保证redis中缓存的设备标识deviceid-服务器ip-设备连接是唯一对应的。
[0134]
相应的,在另一种应用场景,设备先后两次上线与服务器连接的交互流程可以包括如下步骤:
[0135]
1、设备上线后,服务器对设备进行验证,验证通过,与设备建立连接。
[0136]
2、服务器获取第一存储区中与设备对应的映射关系,得到第一存储区返回结果为空值。
[0137]
3、服务器将与设备连接的映射关系写入第一存储区,得到第一存储区返回成功的结果。进而服务器向设备返回成功的消息,并正常处理任务信息。服务器在检测到与设备的连接断开时,执行如下步骤:
[0138]
4、服务器获取第一存储区中与设备对应的映射关系,得到第一存储区返回的设备与服务器连接的映射关系。
[0139]
5、服务器对比获取到的映射关系中的服务器ip、时间戳timestamp与本地记录建立连接的服务器、时间戳timestamp相同,则删除服务器与设备连接的映射关系;得到第一存储区返回成功的消息。
[0140]
6、当设备再次上线后,服务器对设备进行验证,验证通过与设备建立连接;并获取第一存储区中与设备对应的映射关系;得到第一存储区返回结果为空值。
[0141]
7、服务器将与设备连接的映射关系写入第一存储区;得到第一存储区返回成功的结果;并向设备返回成功的消息;基于与设备的连接正常处理任务信息。
[0142]
在一些实施例中,在将与所述设备连接的映射关系写入第一存储区中之后,该方法还包括:
[0143]
在获取到任务消息时,将所述任务消息发送至连接的所述设备。
[0144]
其中,该任务消息为服务器集群基于第一存储区中与设备对应的映射关系向第一服务器推送的,服务器集群包括第一服务器,第一存储区为服务器集群对应的存储区,第二存储区为第一服务器的存储区。
[0145]
示例性的,在设备连接管理系统中的控制服务模块在进行消息推送之前,读取第一存储区中与设备对应的映射关系,基于映射关系向目标服务器进行推送,无需将消息广播至服务器集群中的所有服务器,从而服务器集群中的其他服务器也无需接收不需要处理的消息,节约服务器及网络资源,提高服务器响应效率。
[0146]
通过本技术实施例,由于redis中已存在设备id与服务器ip的映射关系的缓存,在执行推送任务时,仅需要读取对应的映射关系,即可向设备连接的服务器发送推送请求,不再需要广播操作,大大提高了推送请求的处理效率。对比单节点服务器,该分布式服务器可以容纳的连接数更多,具有高可用、可拓展的优点;对比不采用redis缓存映射关系的多节点服务器,如其不保证连接唯一性,可能存在同一设备同时与多台服务器保持有连接的情况,从而浪费服务器资源;如其在保证连接唯一性时,需要耗费大量网络资源用于同步各个服务器节点的连接信息,各个节点同样需要耗费服务器资源保存连接信息,此类弊端在集群规模庞大时会越发明显。同时,在处理透传请求时,传统的处理方式,需要将发送给设备的透传请求广播至服务器集群中的所有服务器节点,仅该设备连接到的服务器节点正常处理,其他服务器节点则丢弃对应请求,同样浪费大量网络资源。而且在同一设备并发上线时,同一服务器上不同线程之间的删除映射关系缓存操作可能会互相影响,导致业务出错,通过本技术中缓存的映射关系中存在连接标识(如时间戳等)可以避免发生误删的情况。通过本技术实施例,采用设备连接管理方式形成的分布式长连接管理系统,在设备规模增长时,且在保证业务正常处理的情况下,可以很便捷地进行横向扩容,不会因为扩容带来额外
的处理成本(例如上述需要保证连接唯一性进行同步信息以及广播至所有节点的操作所带来的开销等)。
[0147]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0148]
对应于上文实施例所述的设备连接管理方法,图7示出了本技术实施例提供的设备连接管理装置的结构框图,为了便于说明,仅示出了与本技术实施例相关的部分。
[0149]
参照图7,该装置包括:
[0150]
查询单元71,用于与设备建立连接后,查询第一存储区中与所述设备对应的映射关系;
[0151]
处理单元72,用于若查询结果为空值,则将与所述设备连接的映射关系存储在所述第一存储区;若查询结果为所述设备与第二服务器连接的映射关系,则向所述第二服务器发送断开连接请求,并在所述第二服务器删除所述第一存储区中所述设备与所述第二服务器连接的映射关系后,将与所述设备连接的映射关系写入所述第一存储区;
[0152]
其中,所述断开连接请求用于指示所述第二服务器断开与所述设备的连接,并在连接断开后,所述第二服务器确定与所述设备连接的映射关系满足删除条件时,删除所述第一存储区中所述设备与所述第二服务器连接的映射关系。
[0153]
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
[0154]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0155]
本技术实施例还提供了一种设备连接管理系统,包括服务器集群、第一存储区以及控制服务模块;所述服务器集群包括若干个服务器;所述第一存储区用于存储所述服务器与设备连接的映射关系;所述控制服务模块用于在推送任务消息时,读取所述第一存储区中与设备对应的映射关系,并根据所述映射关系将所述任务消息推送至所述服务器集群中与所述设备连接的服务器。
[0156]
本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
[0157]
本技术实施例提供了一种计算机程序产品,当计算机程序产品在服务器上运行时,使得服务器执行时实现可实现上述各个方法实施例中的步骤。
[0158]
图8为本技术一实施例提供的服务器8的结构示意图。如图8所示,该实施例的服务
器8包括:至少一个处理器80(图8中仅示出一个)、存储器81以及存储在所述存储器81中并可在所述至少一个处理器80上运行的计算机程序82,所述处理器80执行所述计算机程序82时实现上述实施例中的步骤。
[0159]
所述服务器8可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该服务器8可包括,但不仅限于,处理器80、存储器81。本领域技术人员可以理解,图8仅仅是服务器8的举例,并不构成对服务器8的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
[0160]
所称处理器80可以是中央处理单元(central processing unit,cpu),该处理器80还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0161]
所述存储器81在一些实施例中可以是所述服务器8的内部存储单元,例如服务器8的硬盘或内存。所述存储器81在另一些实施例中也可以是所述服务器8的外部存储设备,例如所述服务器8上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,所述存储器81还可以既包括所述服务器8的内部存储单元也包括外部存储设备。所述存储器81用于存储操作系统、应用程序、引导装载程序(bootloader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器81还可以用于暂时地存储已经输出或者将要输出的数据。
[0162]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram random access memory)、电载波信号、电信信号以及软件分发介质。例如u盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
[0163]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0164]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0165]
在本技术所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以
通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
[0166]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0167]
以上所述实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献