一种匹配管线式http请求与响应的方法与流程

文档序号:23551524发布日期:2021-01-05 21:10阅读:196来源:国知局
一种匹配管线式http请求与响应的方法与流程

本发明涉及数据传输领域,尤其涉及一种匹配管线式http请求与响应的方法。



背景技术:

http请求方式包括传统响应式http请求方式和管线式http请求方式两种,传统响应试http请求方式受headoflineblocking(队头阻塞)约束,性能极限受到限制。在需要短时间大量请求的压力测试场景下,不能很好发挥测试终端全部性能。为减少等待,传统测试手段会使用多开线程等异步手段,但是单条链路依然无法避免等待,为了尽可能加压会使用更多系统线程,导致上下文切换过于频繁,大多数情况并不能充分利用带宽,测试设备就已经性能不足。

因此http1.1提出了管线化(pipelining)技术,一次性发送多个request请求实现对应用服务的高性能测试。然而现有管线式http请求方式难以将请求与响应精确匹配,响应失败的请求也无法正确区分,在非幂等请求的测试场景下几乎无法应用。并且由于无法有效准确匹配响应,导致响应耗时等重要数据无法准确统计,难以数据化衡量测试结果。



技术实现要素:

本发明要解决的技术问题,在于提供一种匹配管线式http请求与响应的方法,解决现有管线式http请求方式难以将请求与响应精确匹配,无法正确区分响应失败的请求的技术问题。

为实现上述目的,本发明采用下述技术方案:

一种匹配管线式http请求与响应的方法,所述方法包括:

管线式http对向服务器发送的http请求采用独立的transmissionid进行动态标识;

服务器识别所述http请求的transmissionid并回写入响应头中;

管线式http根据通过crlf、配合content-length及chunked响应头从服务器返回的响应流中提取独立的响应头;

提取的独立响应头与http请求通过transmissionid进行匹配。

作为优选,所述方法还包括:

针对不含有transmissionid的独立响应头的响应流,根据响应流的提取顺序与剩余的http请求进行顺序匹配。

作为优选,所述方法还包括:

对管线式http中每一条pipeline的响应流中每个响应分段标记时间戳,并通过协议解析识别其中的有效时间戳;

标记每一条pipeline中每一条http请求的开始时间值,其中,记录http请求的最后一个字节推入网卡的时间为每一条http请求的开始时间值;

标记每一条pipeline接收到的每一条响应流的结束时间值,其中,将一个响应流的一组数据段中的第一个有效时间戳记为该响应流的结束时间值;

根据响应流的结束时间值与匹配的http请求的开始时间值计算请求的响应时间。

本发明的有益效果是:本发明提供了一种匹配管线式http请求与响应的方法,一是在不修改应用服务的情况下同时为管线式http请求及响应添加transmissionid,实现管线式http请求与响应的精准匹配;二是通过对返回的每一条响应流进行实时的时间戳标记,能够计算出http请求精确的响应时延,提高了管线式http请求方法的测试精确度。

附图说明

图1为本发明提供的一种匹配管线式http请求与响应的方法的流程示意图;

图2为本发明提供的一个示例中获取管线式http请求精确响应时间的流程示意图。

具体实施方式

下面通过具体实施例,并结合附图,对本发明的技术方案作进一步的具体描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前http1.1提出了管线化(pipelining)技术,一次性发送多个request请求实现对应用服务的高性能测试。然而现有管线式http请求方式难以将请求与响应精确匹配,响应失败的请求也无法正确区分,在非幂等请求的测试场景下几乎无法应用。并且由于无法有效准确匹配响应,导致响应耗时等重要数据无法准确统计,难以数据化衡量测试结果。

为了能够解决现有管线式http请求方式难以将请求与响应精确匹配,无法正确区分响应失败的请求的技术问题,本发明实施例提供一种匹配管线式http请求与响应的方法。

以下结合附图,详细说明本发明中各实施例提供的技术方案。

一种匹配管线式http请求与响应的方法,如附图1所示,所述方法包括:

s101,管线式http对向服务器发送的http请求采用独立的transmissionid(传输线id)进行动态标识;

针对步骤s101,管线式http对每一条向服务器发送的http请求报文均采用独立的transmissionid(传输线id)进行动态标识。

s102,服务器识别所述http请求的transmissionid(传输线id)并回写入响应头中;

针对步骤s102,服务器识别每一条http请求报文中的transmissionid(传输线id),并将每个transmissionid(传输线id)回写入该条http请求报文的响应流的响应头中;

s103,管线式http根据通过crlf(carriagereturn&linefeed,回车并换行)、配合content-length(响应的长度)及chunked(分块传输)响应头从服务器返回的响应流中提取独立的响应头;

针对步骤s103,接收到服务器返回的响应流后,管线式http通过对响应流进行crlf(carriagereturn&linefeed,回车并换行)、配合content-length(响应流的长度)及chunked(分块传输)响应头从服务器返回的响应流中提取独立的响应头。

例如,服务器返回的响应流的content-length为100,解析响应流中的响应实体100后并以crlfcrlf标记结束;或transfer-encoding为chunked通过解析实体动态响应块长度,最后一块以0x00crlfcrlf结束,对上述解析完成的响应提取transmissionid的响应头作为独立的响应头,并与请求匹配。

s104,提取的独立响应头与http请求通过transmissionid进行匹配。

针对步骤s104,根据独立响应头的transmissionid与http请求的transmissionid进行匹配,获得匹配结果,将匹配成功的独立响应头的响应流标记为http请求的响应对象。

在一个示例中,所述方法还包括:针对不含有transmissionid的独立响应头的响应流,根据响应流的提取顺序与剩余的http请求进行顺序匹配。

可以理解,针对部分或全部响应流的独立响应头不含有transmissionid的时候,在含有transmissionid的独立响应头的响应流匹配结束后,根据提取不含有transmissionid的独立响应头的顺序,将不含有transmissionid的独立响应头的响应流与剩余的http请求按照提取顺序进行匹配。

在一个示例中,如附图2所示,所述方法还包括:

s201,对管线式http中每一条pipeline的响应流中每个响应分段标记时间戳,并通过协议解析识别其中的有效时间戳;

s202,标记每一条pipeline中每一条http请求的开始时间值;

其中,记录http请求的最后一个字节推入网卡的时间为每一条http请求的开始时间值。

s203,标记每一条pipeline接收到的每一条响应流的结束时间值;

其中,将一条响应流的一组数据段中的第一个有效时间戳记为该响应流的结束时间值。

s204,根据响应流的结束时间值与匹配的http请求的开始时间值计算请求的响应时间。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,这些均属于本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1