我用httpclient访问接口,统计图有些不均匀,差距较大 ,有时只有几十毫秒,下图看到这种情况占多数,600-800毫秒之间的算是浏览器正常的产生调用接口的时间耗时

然后用jmeter跑时都是均值在600-800左右,每次很平均

让大家看我的统计时间耗时代码

结束时间返回结束

就耗时来说,用httpclient的相对网络开销占比不会大这么多吧 ,第二经常访问耗时不均匀的原因也找不到。

问题:两种不同的方式请求接口,输出结果是一样,如果发现两种在耗时上有差异,差异上的数据问题在哪里?一起来探讨下。

对比:取同一个接口count.do_收集数据,

①下图是通过HttpClient的方式请求,计时都在100ms左右

  ②下图是浏览器请求接口count.do_,计时如图

连续请求了几个页面得出下面表格

页面 总耗时 Queueing Stalled Request sent Waiting (TTFB) Content Download
监控页 1.95s 0.34ms 0.45ms 0.11ms 1.91s 37.73ms
首页 893.18ms 0.5ms   115.83ms 79us 776.29ms 0.48ms
人员管理页 1.03 s 0.34 ms 128.06 ms 90 μs 787.83 ms 111.20 ms
审计日志页 915.49 ms 0.63 ms 0.63 ms 77 μs 913.81 ms 0.56 ms
参数设置页 778.97 ms 0.35 ms 0.47 ms 0.15 ms 777.41 ms 0.58 ms

时间细分阶段说明(对上面浏览器各参数解读意思)

以下是有关在 Timing 标签中可能看到的各阶段的更多信息:

  • Queueing。 浏览器在以下情况下对请求排队:

    • 存在更高优先级的请求。
    • 此源已打开六个 TCP 连接,达到限值。 仅适用于 HTTP/1.0 和 HTTP/1.1。(批注:大部分页面都是超过6个接口的)
    • 浏览器正在短暂分配磁盘缓存中的空间
  • Stalled。 请求可能会因 Queueing 中描述的任何原因而停止。
  • DNS Lookup。 浏览器正在解析请求的 IP 地址。
  • Proxy negotiation。 浏览器正在与代理服务器协商请求。
  • Request sent。 正在发送请求。
  • ServiceWorker Preparation。 浏览器正在启动 Service Worker。
  • Request to ServiceWorker。 正在将请求发送到 Service Worker。
  • Waiting (TTFB)。 浏览器正在等待响应的第一个字节。 TTFB 表示 Time To First Byte(至第一字节的时间)。 此时间包括 1 次往返延迟时间及服务器准备响应所用的时间。
  • Content Download。 浏览器正在接收响应。
  • Receiving Push。 浏览器正在通过 HTTP/2 服务器推送接收此响应的数据。
  • Reading Push。 浏览器正在读取之前收到的本地数据。

分析

  ①在上面的表格中,stalled明显比较高,产生时间达到上限的tcp的连接,是接口等待时间连接

  ②Waiting (TTFB)在每次请求的时间都是占比非常高的,这里延迟比较高的可能性,也有浏览器处理等待响应时间浏览器问题的可能

最后,加了很多与浏览器相同的请求头,但是请求耗时依旧变化不大

所以,暂时得出结论,这种httpclient无法完全和浏览器请求相同,毕竟客户端和服务端之间有网络开销,您怎么看?欢迎有不同见解,请在评论区留言。

HttpClient与浏览器调用服务接口差异的更多相关文章

  1. 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程

    本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...

  2. Python调用服务接口

    #! /usr/bin/env python # coding=utf-8 ############################################################## ...

  3. Jinkins流水线脚本使用curl命令调用服务接口,并且使用url传参。

    curl http://xxx.xx.xx.xx:xxxx/jenkins/publish?fileName=${fileName}&tag_name=${tag_name} 如图调用不符合c ...

  4. 使用接口的方式调用远程服务 ------ 利用动态调用服务,实现.net下类似Dubbo的玩法。

    分布式微服务现在成为了很多公司架构首先项,据我了解,很多java公司架构都是 Maven+Dubbo+Zookeeper基础上扩展的. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按 ...

  5. So easy Webservice 3.使用HttpClient工具调用Webservice接口

    首先,看看webservice服务调用演示: a) 登录http://www.webxml.com.cn b) 单击手机查询服务 c) 选择要调用的方法 例如: getMobileCodeInfo 输 ...

  6. 通过HttpClient调用服务

    /** * 通过HttpClient调用服务 * * @param url 路径 * data json数据 * @return */ //post请求方法public String sendItsm ...

  7. C#使用windows服务定时调用api接口

    使用VS创建windows服务项目: 创建好项目  会出现一个设计界面 右键弹出对话框 选择添加安装程序 名字什么的自己可以改: 项目目录: 打开项目中的ProjectInstaller.Design ...

  8. 调用URL 接口服务

    1.Net调用URL 接口服务 using System; using System.Collections; using System.Configuration; using System.Dat ...

  9. 一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

    今天给大家翻译一篇由ASP.NET首席开发工程师James Newton-King前几天发表的一篇博客,文中带来了一个实验性的产品gRPC-Web.大家可以点击文末的讨论帖进行相关反馈.我会在文章末尾 ...

随机推荐

  1. Data - Spark简介

    Spark简介 Spark是基于内存计算的大数据并行计算框架,可用于构建大型的.低延迟的数据分析应用程序. HomePage:http://spark.apache.org/ GitHub:https ...

  2. 聊聊我面试过的一个最奇葩的 Java 程序猿!

    上周我聊了聊最让我反感的 10 种程序猿,无奈一个小时就进行了删除,详细原因就不说了,容易招黑. 今天聊的我面试过的最奇葩的一个程序猿,绝对是奇葩中的奇葩,简直是程序猿中的另类,最让我反感的程序猿又添 ...

  3. HoloLens开发手记-凝视 Gaze

    在全息应用中,凝视是第一种输入形式,被用于定位物体(功能和PC的光标指针类似).凝视告诉你用户正在看向世界中的位置,让你能够确定他们的意图.在现实世界中,你通常会盯着你打算与之交互的物体.这种方式与凝 ...

  4. LeetCode--No.008 String to Integer (atoi)

    8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...

  5. UML类图中的六种关系(物理设计阶段)

    UML类图中经常会用到各种箭头和线条来表示不同类或者接口之间的关系,因此非常好的理解各个图标的含义是很有必要的. 在物理设计阶段可以通过EA工具将类图搭建好,然后直接生成物理类,这样也可以减少物理设计 ...

  6. python selenium 对浏览器标签页进行关闭和切换

    1.关闭浏览器全部标签页 driver.quit() 2.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页A) driver.close() 3.关闭当前标签页(从标签页A打开新的标签页B,关闭 ...

  7. 从零开始学 Web 之 DOM(四)节点

    大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...

  8. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十五):系统服务监控

    系统服务监控 新建监控工程 新建Spring Boot项目,取名 kitty-monitor,结构如下. 添加项目依赖 添加 spring boot admin 的相关依赖. pom.xml < ...

  9. tomcat8 JVM 优化

    在Linux环境下设置Tomcat JVM,在/opt/tomcat/bin/catalina.sh文件中找到"# ----- Execute The Requested Command&q ...

  10. 【详解】WebSocket相关知识整理

    前言 记得大概半年前就产生了疑惑,即后台如何主动向前端推送数据.问了下专业老师,知道了原来有一个叫WebSocket的技术可以用于推送数据.于是,当时我就找了个教程,用的是Spring WebSock ...