System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于Netty的声明式长连接双向非阻塞通信方法及系统技术方案_技高网

基于Netty的声明式长连接双向非阻塞通信方法及系统技术方案

技术编号:40832069 阅读:2 留言:0更新日期:2024-04-01 14:55
本发明专利技术公开了一种客户端与服务端的长连接双向非阻塞式通信方法及系统。本方法基于Netty的声明式调用和ASM字节码增强技术,通过注解自动装配,简化了开发的注解解析模块,实现去中心化,大幅提高了开发效率,降低了Netty开发难度,只需要少量的配置,即可构建轻量级Netty高性能通信服务。通过在底层内置自动连接管理机制,基于心跳检测模块监控连接状态,通过断线重连模块在需要时自动重新连接,保证客户端与服务端维持长连接,实现双向非阻塞式高性能通信。

【技术实现步骤摘要】

本专利技术涉及通信,特别是涉及一种基于netty的声明式长连接双向非阻塞通信方法及系统。


技术介绍

1、随着现代互联网应用的快速发展,实现高效、可靠的双向非阻塞通信方式变得十分重要。netty作为一个高性能的网络通信框架,提供了非常强大的异步、事件驱动的编程模型,适用于构建高性能、可扩展的网络应用。然而,尽管netty具有这些优势,但在实际应用中,传统的netty开发方式往往需要开发者编写大量的样板代码来处理连接的建立、维护和关闭,同时还需要手动处理数据的解析和序列化。这些底层细节往往分散了开发者的注意力,降低了开发效率,并且容易引入潜在的错误。

2、一些远程过程调用(rpc)框架如grpc、apache dubbo等,专注于简化跨网络的通信。它们提供了声明式的接口定义,使得开发者可以像调用本地方法一样调用远程服务。然而,rpc框架需要使用大型分布式项目,强烈依赖于服务注册中心来管理服务的发现和注册,存在对资源要求高、开发难度大、学习曲线陡峭、不支持多种协议等问题。

3、许多现代网络应用需要维持长连接以保持实时性。然而,传统方法可能在长时间连接的管理上存在问题,可能导致连接断开或资源浪费。


技术实现思路

1、有鉴于此,本专利技术实施例提供基于netty的声明式长连接双向非阻塞通信方法及系统,至少部分解决现有技术中存在的问题。

2、第一方面,本专利技术提供了一种基于netty的声明式长连接双向非阻塞通信方法,包括:

3、s1:准备阶段,在netty客户端定义请求服务端抽象接口,分别在定义的接口类和方法上添加注解,并指定全局唯一标识符;在netty服务端定义业务服务类,分别在类和方法上添加注解,并定义唯一接口标识符;

4、s2:编译阶段,在所述netty客户端,通过asm字节码增强技术对所述定义的接口进行实现,并对所述方法进行增强,生成asm增强的接口实现类;

5、s3:启动阶段,启动所述netty客户端与所述netty服务端建立长连接,在ioc容器加载过程中触发基础模块自动加载,在所述netty客户端注入所述asm增强的接口实现类对象;

6、s4:运行阶段,所述netty客户端调用所述asm增强的接口实现类对象建立的连接通道,将参数序列化请求发送给所述netty服务端,所述netty服务端通过序列化模块将参数序列化后返回所述netty客户端,所述netty客户端通过反序列化模块将服务端响应结果反序列化解析成接口定义的方法而获得响应参数。

7、进一步地,所述s1准备阶段还包括:

8、在项目对象模型(project object model,pom)依赖管理中引入客户端jar依赖包;

9、在spring boot框架启动类上添加所述netty客户端启动注解@enablecallerclient,并指定连接ip地址和端口。

10、进一步地,所述s1准备阶段还包括:

11、在pom依赖管理中引入服务端jar依赖包;

12、在spring boot框架启动类上添加所述netty服务端启动注解@enablecallerserver,并指定监听端口。

13、优选地,所述s1准备阶段包括:在所述netty客户端定义的接口类上添加注解@callclientcomponet,并且在定义的方法上添加注解@callermethod。

14、优选地,所述s1准备阶段包括:在所述netty服务端的业务服务类上添加注解@callercontroller,并且在定义的方法上添加注解@callermethod。

15、在所述s2编译阶段,对所述方法进行增强可包括但不限于:参数序列化、调用客户端数据发送消息、添加反序列解析器。

16、在所述s3启动阶段,在ioc容器加载过程中触发基础模块自动加载,在所述netty客户端的自动加载具体可包括但不限于:获取注解信息,创建所述netty客户端或所述netty服务端;加载断线重连模块;扫描@callermethod注解方法返回值,生成反序列化解析器等。

17、在所述s3启动阶段,在ioc容器加载过程中触发基础模块自动加载,在所述netty服务端的自动加载具体可包括但不限于:加载心跳检测模块;扫描@callercontroller注解类中的方法,并创建两个映射关系,分别是标识符映射类和标识符映射对应方法。

18、进一步地,所述声明式长连接双向非阻塞通信方法还包括:

19、所述netty客户端定时向所述netty服务端的心跳检测模块发送心跳,以保持与服务端建立连接。

20、更进一步地,所述声明式长连接双向非阻塞通信方法还包括:

21、所述netty客户端的断线重连模块,在与netty服务端发生连接中断时,会触发断线重连逻辑,尝试重新与服务端建立连接。

22、第二方面,本专利技术提供了一种基于netty的声明式长连接双向非阻塞通信系统,该系统包括netty通讯模块、声明式定义解析模块、asm字节码增强模块、启动注解加载模块、序列化模块、反序列化解析模块;

23、其中,所述声明式定义解析模块扫描接口类上标有@callcomponet注解,将接口类中被@callmethod注解标记的方法解析成元信息树,该元信息树中描述接口类名、包含所有方法信息的集合,该集合包括但不限于每个方法的签名、方法声明的请求参数类型、返回值类型、以及注解上标识的方法全局唯一标识符;

24、所述asm字节码增强模块根据声明式定义解析模块构建的元信息树,利用asm字节码增强技术,生成增强的接口实现类,并实现每个定义的方法并对每个方法实施增强,该增强包括但不限于参数序列化、调用客户端数据发送消息、添加反序列解析器等;其中,在增强实现类中注入netty通讯模块,实现对netty网络通讯api封装;

25、所述启动注解加载模块,扫描启动类上是否有@enablecallerserver注解,若有则启动netty服务端并监听指定端口;并扫描启动类上是否有@enablecallerclient注解,若有则对netty客户端配置ip地址和端口,并与服务端建立长连接通道;

26、所述序列化模块在元信息树基础上,循环获取每个方法请求参数,序列化二进制数据,并使用内置默认压缩模块对数据进行压缩,输出一个可以在网络中高效传输的二进制数据;

27、所述反序列解析模块在编译阶段,根据元信息树信息保留方法上泛型,当通过网络层接口获取响应二进制流后首先逆向解压二进制流,再根据方法类型以及泛型信息,反序列化成方法定义的数据结构。

28、第三方面,本专利技术还提供了一种电子设备,该电子设备包括:

29、至少一个处理器;以及,

30、与所述至少一个处理器通信连接的存储器;

31、其中,所述存储器存储有能够被所述至少一个处理本文档来自技高网...

【技术保护点】

1.一种基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,该方法包括以下步骤:

2.根据权利要求1所述的基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,所述S1准备阶段还包括:

3.根据权利要求1所述的基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,所述S1准备阶段具体包括:

4.根据权利要求1所述的基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,在所述S2编译阶段,对所述方法进行增强包括:参数序列化、调用客户端数据发送消息、添加反序列解析器。

5.根据权利要求3所述的基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,在所述S3启动阶段,在IOC容器加载过程中触发基础模块自动加载,在所述Netty客户端的自动加载具体可包括:获取注解信息,创建所述Netty客户端或所述Netty服务端;加载断线重连模块;扫描@CallerMethod注解方法返回值,生成反序列化解析器;在所述Netty服务端的自动加载具体可包括:加载心跳检测模块;扫描@CallerController注解类中的方法,并创建两个映射关系,分别是标识符映射类和标识符映射对应方法。

6.根据权利要求5所述的基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,该方法还包括:

7.根据权利要求5所述的基于Netty的声明式长连接双向非阻塞通信方法,其特征在于,该方法还包括:

8.一种基于Netty的声明式长连接双向非阻塞通信系统,其特征在于,该系统包括Netty通讯模块、声明式定义解析模块、ASM字节码增强模块、启动注解加载模块、序列化模块、反序列化解析模块;

9.一种电子设备,其特征在于,该电子设备包括:

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机指令,所述计算机指令当由至少一个处理器执行时使所述至少一个处理器执行如权利要求1至7中的任一项所述的基于Netty的声明式长连接双向非阻塞通信方法。

...

【技术特征摘要】

1.一种基于netty的声明式长连接双向非阻塞通信方法,其特征在于,该方法包括以下步骤:

2.根据权利要求1所述的基于netty的声明式长连接双向非阻塞通信方法,其特征在于,所述s1准备阶段还包括:

3.根据权利要求1所述的基于netty的声明式长连接双向非阻塞通信方法,其特征在于,所述s1准备阶段具体包括:

4.根据权利要求1所述的基于netty的声明式长连接双向非阻塞通信方法,其特征在于,在所述s2编译阶段,对所述方法进行增强包括:参数序列化、调用客户端数据发送消息、添加反序列解析器。

5.根据权利要求3所述的基于netty的声明式长连接双向非阻塞通信方法,其特征在于,在所述s3启动阶段,在ioc容器加载过程中触发基础模块自动加载,在所述netty客户端的自动加载具体可包括:获取注解信息,创建所述netty客户端或所述netty服务端;加载断线重连模块;扫描@callermethod注解方法返回值,生成反序列化解析器;在所述n...

【专利技术属性】
技术研发人员:郭昌盛彭程李华生王磊姜昱西
申请(专利权)人:杭州赤豹科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1