一种跨语言数据交互方法及相关装置与流程

文档序号:24688848发布日期:2021-04-16 09:54阅读:159来源:国知局
一种跨语言数据交互方法及相关装置与流程

1.本申请涉及计算机技术领域,特别涉及一种跨语言数据交互方法;还涉及一种跨语言数据交互装置、设备以及计算机可读存储介质。


背景技术:

2.tcp(transmission control protocol,传输控制协议)数据传输,如今通常使用阻塞io,其缺点是当用户线程发出io请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出cpu。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除block状态。由此会导致在大数量传输时,对cpu内存的严重消耗。若使用nio的方式,需要开发人员熟练掌握selector,serversocketchannel等api的使用,还需要进行可靠性能力补齐,工作量和难度都非常大,同时还要面临的问题是客户端的断连,重连,网络闪断,半包读写,失败缓存,网络拥塞和一场码流的处理等问题。
3.针对跨语言数据交互,目前通常采用消息中间进行跨语言数据交互。然而对于消息中间件,其需要占用内存,且需要保证消息中间件稳定,一旦消息中间件出现宕机,会导致实时数据反馈异常。另外,在跨语言数据交互时,多个服务之间的数据格式不统一,如果对所有的数据格式进行解析,会导致方法导致过于冗余,且代码扩展性比较低,无法较好的满足新服务接入的需求。
4.有鉴于此,提供一种性能高,可扩展性高,耦合低的跨语言数据交互方法已成为本领域技术人员亟待解决的技术问题。


技术实现要素:

5.本申请的目的是提供一种跨语言数据交互方法,可扩展性高,耦合低,性能好。本申请的另一个目的是提供一种跨语言数据交互装置、设备以及计算机可读存储介质,均具有上述技术效果。
6.为解决上述技术问题,本申请提供了一种跨语言数据交互方法,应用于netty框架定义的服务端,包括:
7.注册spring mvc,并接受客户端的tcp连接;
8.当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;
9.当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。
10.可选的,所述注册spring mvc包括:
11.将mokeservletcontext注册到所述spring mvc的webapplicationcontext容器上下文中;
12.将所述webapplicationcontext容器注册到所述spring mvc的
dispatcherservlet中。
13.可选的,对所述数据进行解析包括:
14.通过myrequesthandler与myresponsehandler对所述数据进行解析。
15.可选的,所述将所述消息封装为http格式包括:
16.通过responseencoder与requestencoder将所述消息封装为http格式。
17.可选的,还包括:
18.通过固定长度的编码器进行拆包与粘包处理。
19.为解决上述技术问题,本申请还提供了一种跨语言数据交互装置,包括:
20.注册模块,用于注册spring mvc,并接受客户端的tcp连接;
21.解析模块,用于当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;
22.封装模块,用于当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。
23.可选的,所述注册模块具体用于将mokeservletcontext注册到所述spring mvc的webapplicationcontext容器上下文中;将所述webapplicationcontext容器注册到所述spring mvc的dispatcherservlet中。
24.可选的,还包括:
25.拆包与粘包模块,用于通过固定长度的编码器进行拆包与粘包处理。
26.为解决上述技术问题,本申请还提供了一种跨语言数据交互设备,包括:
27.存储器,用于存储计算机程序;
28.处理器,用于执行所述计算机程序时实现如上任一项所述的跨语言数据交互方法的步骤。
29.为解决上述技术问题,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的跨语言数据交互方法的步骤。
30.本申请所提供的跨语言数据交互方法,应用于netty框架定义的服务端,包括:注册spring mvc,并接受客户端的tcp连接;当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。
31.可见,本申请所提供的跨语言数据交互方法,将netty框架与spring mvc相结合,利用netty框架与spring mvc实现跨语言数据交互,不依赖第三方中间件就可以实现跨语言数据交互。在代码层面上,研发人员无需关注底层逻辑,以及无需担心各个服务之间的交互消息格式,扩展业务时只需按照开发spring mvc的流程进行扩展即可。通过使用spring mvc,数据交互的入参,和接口返回值都能够通过spring mvc自带的转换器来实现统一化。在性能上,相较于传统的socket阻塞传输,使用netty框架的异步通信能力,能够极大的提升数据传输性能。
32.本申请所提供的跨语言数据交互装置、设备以及计算机可读存储介质均具有上述
技术效果。
附图说明
33.为了更清楚地说明本申请实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
34.图1为本申请实施例所提供的一种跨语言数据交互方法的流程示意图;
35.图2为本申请实施例所提供的一种跨语言数据交互装置的示意图;
36.图3为本申请实施例所提供的一种跨语言数据交互设备的示意图。
具体实施方式
37.本申请的核心是提供一种跨语言数据交互方法,可扩展性高,耦合低,性能好。本申请的另一个核心是提供一种跨语言数据交互装置、设备以及计算机可读存储介质,均具有上述技术效果。
38.为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
39.请参考图1,图1为本申请实施例所提供的一种跨语言数据交互方法的流程示意图,参考图1所示,该方法应用于netty框架定义的服务端,包括:
40.s101:注册spring mvc,并接受客户端的tcp连接;
41.具体的,netty框架是业界最为流行的nio框架之一,其api使用简单,开发门槛低,并且功能强大,预置了多种编码功能,支持多种主流协议。spring mvc是spring内置的一个mvc子框架,主要用于接口的开发,和提供多样性的请求方式和不同的数据请求格式,其核心是通过dispatcherservlet实现,通过分发请求消息来匹配不同的适配器和映射器,从而提高开发的效率。
42.本申请旨在将netty框架与spring mvc相结合,通过netty框架与spring mvc进行跨语言数据交互。为此,在创建netty框架定义的服务端并对服务端进行初始化的基础上,在此服务端中注册spring mvc。
43.其中,在一种具体的实施方式中,注册spring mvc包括:将mokeservletcontext注册到spring mvc的webapplicationcontext容器上下文中;将webapplicationcontext容器注册到spring mvc的dispatcherservlet中。
44.具体而言,初始化mokeservletcontext,并将mokeservletcontext注册到spring mvc的webapplicationcontext容器上下文中。将mokeservletcontext注册到spring mvc的webapplicationcontext容器上下文中意味着向spring mvc注册用于调用的bean。以及将webapplicationcontext容器注册到spring mvc的核心类dispatcherservlet中,以使其能够按照spring mvc的方式进行数据处理。进一步,初始化mockservletconfig,使用dispatcherservlet.init(servletconfig)对dispatcherservlet进行初始化。
45.s102:当接收到客户端发送的http格式的数据时,对数据进行解析,并将数据发送到spring mvc,由spring mvc对http格式的数据进行处理;
46.具体的,打开netty框架定义的tcp通信的服务端口,接受客户端的tcp连接后,当服务端接收到客户端发送的http格式的数据时,服务端对所接收的数据进行解析,解析后进一步将数据发送到spring mvc,由spring mvc按照spring mvc的方式对数据进行处理。
47.对于spring mvc按照spring mvc的方式进行数据处理的具体流程,本申请在此不做赘述,参考现有的相关技术即可。
48.其中,对数据进行解析的方式为:通过myrequesthandler与myresponsehandler对所述数据进行解析。
49.具体而言,定义myrequesthandler与myresponsehandler,myrequesthandler与myresponsehandler继承channelinboundhandleradapter,编写channelinboundhandleradapter中的channel read方法,进而通过myrequesthandler与myresponsehandler读取客户端发送的数据并对数据进行解析。
50.s103:当向客户端发送消息时,将消息封装为http格式,并发送封装后的http格式的消息。
51.具体的,当向客户端发送消息时,首先将消息封装为http格式,进而在封装后发送http格式的消息给客户端。
52.其中,将消息封装为http格式的方式为:通过responseencoder与requestencoder将消息封装为http格式。
53.具体而言,自定义responseencoder与requestencoder,并将responseencoder与requestencoder注册到netty框架的处理流通道上。responseencoder和requestencoder只处理http格式请求,如果类型不对,则不做任何处理,直接转发到下一个编码器。responseencoder与requestencoder继承httprequestencoder,每次在服务端发送消息时,进入编写的write方法进行http格式的封装与发送。
54.进一步,在上述实施例的基础上,还包括:通过固定长度的编码器进行拆包与粘包处理。
55.对于编码器的具体长度本申请不做唯一限定,可以根据实际需要进行差异性设置。
56.综上所述,本申请所提供的跨语言数据交互方法,应用于netty框架定义的服务端,包括:注册spring mvc,并接受客户端的tcp连接;当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。该跨语言数据交互方法,将netty框架与spring mvc相结合,利用netty框架与spring mvc实现跨语言数据交互,不依赖第三方中间件就可以实现跨语言数据交互。在代码层面上,研发人员无需关注底层逻辑,以及无需担心各个服务之间的交互消息格式,扩展业务时只需按照开发spring mvc的流程进行扩展即可。通过使用spring mvc,数据交互的入参,和接口返回值都能够通过spring mvc自带的转换器来实现统一化。在性能上,相较于传统的socket阻塞传输,使用netty框架的异步通信能力,能够极大的提升数据传输性能。
57.本申请还提供了一种跨语言数据交互装置,下文描述的该装置可以与上文描述的方法相互对应参照。请参考图2,图2为本申请实施例所提供的一种跨语言数据交互装置的示意图,结合图2所示,该装置包括:
58.注册模块10,用于注册spring mvc,并接受客户端的tcp连接;
59.解析模块20,用于当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;
60.封装模块30,用于当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。
61.在上述实施例的基础上,作为一种具体的实施方式,所述注册模块10具体用于将mokeservletcontext注册到所述spring mvc的webapplicationcontext容器上下文中;将所述webapplicationcontext容器注册到所述spring mvc的dispatcherservlet中。
62.在上述实施例的基础上,作为一种具体的实施方式,所述解析模块20具体用于通过myrequesthandler与myresponsehandler对所述数据进行解析。
63.在上述实施例的基础上,作为一种具体的实施方式,所述封装模块30具体用于通过responseencoder与requestencoder将所述消息封装为http格式。
64.在上述实施例的基础上,作为一种具体的实施方式,还包括:
65.拆包与粘包模块,用于通过固定长度的编码器进行拆包与粘包处理。
66.本申请还提供了一种跨语言数据交互设备,参考图3所示,该设备包括存储器1和处理器2。
67.存储器1,用于存储计算机程序;
68.处理器2,用于执行计算机程序实现如下的步骤:
69.注册spring mvc,并接受客户端的tcp连接;当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。
70.对于本申请所提供的设备的介绍请参照上述方法实施例,本申请在此不做赘述。
71.本申请还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如下的步骤:
72.注册spring mvc,并接受客户端的tcp连接;当接收到所述客户端发送的http格式的数据时,对所述数据进行解析,并将所述数据发送到所述spring mvc,由所述spring mvc对所述http格式的数据进行处理;当向所述客户端发送消息时,将所述消息封装为http格式,并发送封装后的http格式的所述消息。
73.该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
74.对于本申请所提供的计算机可读存储介质的介绍请参照上述方法实施例,本申请在此不做赘述。
75.说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实
施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备以及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
76.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
77.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

rom、或技术领域内所公知的任意其它形式的存储介质中。
78.以上对本申请所提供的跨语言数据交互方法、装置、设备以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1