一种分组管理客户端连接方法以及系统与流程

文档序号:31051288发布日期:2022-08-06 07:21阅读:68来源:国知局
一种分组管理客户端连接方法以及系统与流程

1.本发明属于网络通信技术领域,尤其涉及一种分组管理客户端连接方法以及系统。


背景技术:

2.早期为了实现消息推送,是通过客户端进行轮询,即每隔一定的时间,由客户端主动对服务端发送http请求,然后服务端返回最新数据,但这有比较明显的缺点,就是大部分请求都是没有作用,这会浪费大量的带宽等资源。
3.现在的普遍做法是使用websocket或者自定义协议,让客户端与服务端之间保持一个长连接,客户端通过监听连接推送的数据,在服务端这些连接会保存在连接池中,但连接池大小并不是无限的,由于客户端有可能一直开着不关闭,会一直占用着连接池的空间,当连接池容量满了之后,新连接就无法接入服务端了,另外,如果连接池里如果有大量连接,当两个客户端需要进行连接或服务端需要给特定的客户端推送消息数据时,需要在有大量连接的连接池中遍历对应的目标客户端进行连接,这样会消耗较多的cpu性能,并且连接效率也较低。


技术实现要素:

4.(一)发明目的为了克服以上不足,本发明的目的在于提供一种分组管理客户端连接方法以及系统,以解决现有的连接池容量有限无法存放大量的连接以及遍历目标客户端时需要在连接池中大量遍历无关的客户端,会消耗较多的cpu性能,并且连接效率也较低的技术问题。
5.(二)技术方案为实现上述目的,本技术一方面提供的技术方案如下:一种分组管理客户端连接方法,包括以下步骤:按照组织架构对所有客户端进行分组;基于每个分组分别创建一个对应的连接池;在接收到需要转发消息的请求客户端的请求指令后在该请求客户端所属分组的连接池中遍历需要接收该消息的目标客户端;若在请求客户端所属分组的连接池中遍历到目标客户端,将请求客户端与目标客户端进行通信连接;否则,在其他分组的连接池中遍历目标客户端并且在遍历到目标客户端后将请求客户端与目标客户端进行通信连接;本技术通过预先按照组织架构对同一内网中所有的客户端进行分组,并且对应每个分组分别设置一个连接池,当请求客户端需要向目标客户端转发消息时,可以优先在请求客户端所在分组对应的连接池中遍历目标客户端,这样,遍历到客户端数量基数大幅减少并且遍历到目标客户端的几率也大幅度增大,可以提升遍历的效率,提升消息转发的速
度,无需遍历较多无关联的客户端还可以减少遍历过程中cpu的性能消耗,并且,本技术通过设置多个连接池,能处理的客户端连接数上限也得到了提升。
6.进一步的,还包括:若在所有的连接池中均没有遍历到目标客户端,按组织架构将该目标客户端新加入到对应的分组中并且重新在对应的连接池中遍历目标客户端;在所有连接池中均没有遍历到目标客户端时,表示该目标客户端是新用户,此时需要按组织架构对新用户进行分组并且分配到对应的连接池,分组后,下次连接过程中可以在对应的连接池中直接遍历到该目标客户端。
7.进一步的,按照组织架构对所有客户端进行分组包括:若所有的客户端均属于同一个组织架构,按不同客户端所在的通信群组对所有客户端进行分组;当所有客户端都属于同一个组织架构,可以按照客户端所在的通信群组对客户端进行分组,由于通信群组是客户端经常进行连接并且通信的,按通信群组对客户端进行分组,可以提高遍历到目标客户端的几率。
8.进一步的,按客户端所在的通信群组对客户端进行分组包括:若同一客户端同时处于多个群组内,按客户端数量最多的通信群组进行分组;按照客户端数量最多的通信群组进行分组,同一连接池中所包含的需要进行连接的客户端数量就会较多,避免遍历过程中需要频繁在不同的连接池中来回切换进行遍历,进一步提升连接的效率。
9.进一步的,按客户端所在的通信群组对客户端进行分组包括:若存在没有加入过任何通信群组的客户端,将客户端加入到与其有过通信连接的客户端所属的分组内;按照将客户端的连接记录将没有加入过通信群组的客户端进行分组,可以将目标客户端分配到包含与其进行经常进行连接的客户端的连接池中,再下一次进行连接时,提升了遍历到目标客户端的几率,进一步提升连接的效率。
10.进一步的,服务器推送消息时,在需要接收该推送消息的目标客户端所在的连接池中遍历目标客户端,通过按分组在对应的连接池中遍历目标客户端并且进行消息推送,可以提升消息推送的效率。
11.本发明的另一方面提供了一种分组管理客户端连接系统,包括:分组模块,能够按照组织架构对所有客户端进行分组;创建模块,能够基于每个分组分别创建一个对应的连接池;遍历模块,能够在接收到需要转发消息的请求客户端的请求指令后在请求客户端所属分组的连接池中遍历需要接收该消息的目标客户端;连接模块,若遍历模块在请求客户端所属分组的连接池中遍历到目标客户端,将请求客户端与目标客户端进行通信连接;或者,遍历模块在其他分组的连接池中遍历到目标客户端,将请求客户端与目标客户端进行通信连接。
12.进一步地,还包括:添加模块,若遍历模块在所有的连接池中均没有遍历到目标客户端,按组织架构将该目标客户端新加入到对应的分组中。
13.进一步地,分组模块包括:第一分组子模块,若所有的客户端均属于同一个组织架构,按不同客户端所在的通信群组对所有客户端进行分组;第二分组子模块,若同一客户端同时处于多个群组内,按客户端数量最多的通信
群组进行分组;第三分组子模块,若存在没有加入过任何通信群组的客户端,将客户端加入到与其有过通信连接的客户端所属的分组内。
14.进一步地,还包括:在服务器推送消息时,遍历模块还用于在需要接收该推送消息的目标客户端所在的连接池中遍历目标客户端。
附图说明
15.图1是本发明的分组管理客户端连接方法的流程图;图2是本发明的分组管理客户端连接方法连接过程的流程图。
具体实施方式
16.为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
17.请参阅图1,本发明提供的一种分组管理客户端连接方法,包括以下步骤:按照组织架构对所有客户端进行分组;服务器基于每个分组分别创建一个对应的连接池;客户端登陆后创建连接,向服务器发送需要转发的消息以及请求指令,服务器在接收到转发的消息以及请求指令后在包含该请求客户端所属分组的连接池中遍历需要接收该消息的目标客户端;若在请求客户端所属分组的连接池中遍历到目标客户端,将请求客户端与目标客户端进行通信连接;否则,在其他分组的连接池中遍历目标客户端并且在遍历到目标客户端后将请求客户端与目标客户端进行通信连接。
18.具体的,上述的按照组织架构对所有客户端进行分组具体可以按科室、按部门、按公司等等的其中一种架构作为一个组织架构进行划分,不同的使用场景划分的粗粒度不同。
19.具体的,在按照组织架构对所有客户端进行分组之前,需要获取每个客户端所属的组织架构。
20.具体的,获取每个客户端所属的组织架构可以是网络管理员对每个客户端所在的架构进行手动归类,也可以是在不同架构的服务端上标注不同的标识,然后服务器根据这些不同标识对客户端进行分类。
21.具体的,上述是服务器初始化时进行的预分组过程,即在初始的时候将当前的已经加入到组织架构的客户端进行分组,后期可能还有一些新加入的客户端。
22.具体的,若在所有的连接池中均没有遍历到目标客户端,表示该目标客户端是新加入的客户端,按组织架构将该新的目标客户端新加入到对应的分组中,并且重新在对应的连接池中遍历目标客户端。
23.以下为创建连接池的具体过程:
分组后,对应每个分组分别创建一个map来缓存分组信息,map中缓存了客户端uuid(标识码)作为key,缓存了客户端id作为value;每个分组创建了对应的一个连接池后,分别配套创建一个消息队列channel和协程goroutine,协程goroutine的作用是对消息队列channel中的消息进行逐个处理,即根据请求客户端的请求在连接池中遍历对应的目标客户端并且进行连接。
24.具体的,本技术将大量的连接分摊到多个连接池中,多个协程goroutine又分别处理各自的连接池,cpu同时管理多个协程goroutine,充分利用cpu的多核性能,使消息推送效率得到显著提升,同时也因为有多个连接池,能处理的连接数上限也得到了提升。
25.请参阅图2,以下为请求客户端与目标客户端连接的具体过程:当请求客户端要发消息给目标客户端,请求客户端会先把需要转发的消息以及目标客户端的uuid发送到消息管理器,消息管理器会获取请求客户端map中的分组信息,并且根据请求客户端发送的目标客户端uuid优先在请求客户端所属的分组中查找目标客户端是否在同一个分组内,若查找到,根据目标客户端的uuid在map中获取目标客户端id,将请求客户端需要转发的消息和目标客户端id一起存放在连接池的消息队列channel中,等待协程goroutine进行处理,协程goroutine逐个处理消息队列channel中的消息,根据目标客户端id在请求客户端所在的连接池中遍历目标客户端并且在遍历目标客户端后进行连接,然后将消息发送给目标客户端。具体的,若在请求客户端的map中查找不到目标客户端的uuid,表示该目标客户端与请求客户端不在同一个分组内,消息管理器会再查找其他分组的map。
26.具体的,若查找了所有分组的map均没有查找到目标客户端的uuid,表示该目标客户端是新加入的,按组织架构将该新加入的目标客户端新加入到对应的分组中,更新map中的缓存信息,并且重新在对应的连接池中遍历目标客户端。
27.具体的,若所有的客户端均属于同一个组织架构(即同一个科室、同一个部门或同一个按公司等),按不同客户端所在的通信群组对所有客户端进行分组。具体的,例如客户端a、客户端b、客户端c和客户端d均处于同一通信群中,将客户端a、客户端b、客户端c和客户端d统一划分成一个分组并且共同创建一个连接池。具体的,通信群可以是微信通信群、qq通信群或钉钉通信群等等。
28.具体的,若同一客户端同时处于多个群组内,例如客户端a在通信群

内并且同时又在通信群

中,其中,通信群

中人数是100人,通信群

中人数是300人,将客户端a归类到按照通信群

建立的分组中,将客户端从通信群

建立的分组中剔除。
29.具体的,有些客户端是新加入的并且并没有加入到任何的通信群组中,若存在没有加入过通信群组的客户端,将客户端加入到与其有过通信连接的客户端所属的分组内。进一步地,当客户端是新加入的并没有与任何客户端进行过连接的,需要人工手动将客户端添加到对应的分组中。
30.具体的,当服务器推送消息到某一客户端时,服务器先在所有分组的map中查找对应的该客户端的uuid,当在某个分组的map中查找到对应的uuid后,根据uuid获取该客户端的客户端id,并且在该分组的连接池中遍历该目标客户端,这样,遍历过程中就无需大量遍历无关的客户端,可以降低遍历的基数,减少遍历过程中cpu性能的消耗。
31.本技术所涉及到的名词:
websocket — 一种在单个tcp连接上进行全双工通信的协议。
32.goroutine — golang的轻量级线程,它的调度是由 golang 运行时进行管理的。
33.channel —golang中goroutine之间传递数据的一个通道。
34.golang — 一个开源的编程语言。
35.本发明的另一方面提供了一种分组管理客户端连接系统,包括:分组模块,能够按照组织架构对所有客户端进行分组;创建模块,能够基于每个分组分别创建一个对应的连接池;遍历模块,能够在接收到需要转发消息的请求客户端的请求指令后在请求客户端所属分组的连接池中遍历需要接收该消息的目标客户端;连接模块,若遍历模块在请求客户端所属分组的连接池中遍历到目标客户端,将请求客户端与目标客户端进行通信连接;或者,遍历模块在其他分组的连接池中遍历到目标客户端,将请求客户端与目标客户端进行通信连接。
36.进一步地,还包括:添加模块,若遍历模块在所有的连接池中均没有遍历到目标客户端,按组织架构将该目标客户端新加入到对应的分组中。
37.进一步地,分组模块包括:第一分组子模块,若所有的客户端均属于同一个组织架构,按不同客户端所在的通信群组对所有客户端进行分组;第二分组子模块,若同一客户端同时处于多个群组内,按客户端数量最多的通信群组进行分组;第三分组子模块,若存在没有加入过任何通信群组的客户端,将客户端加入到与其有过通信连接的客户端所属的分组内。
38.进一步地,还包括:在服务器推送消息时,遍历模块还用于在需要接收该推送消息的目标客户端所在的连接池中遍历目标客户端。
39.应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1