HttpClient与浏览器调用服务接口差异
我用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与浏览器调用服务接口差异的更多相关文章
- 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程
本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...
- Python调用服务接口
#! /usr/bin/env python # coding=utf-8 ############################################################## ...
- Jinkins流水线脚本使用curl命令调用服务接口,并且使用url传参。
curl http://xxx.xx.xx.xx:xxxx/jenkins/publish?fileName=${fileName}&tag_name=${tag_name} 如图调用不符合c ...
- 使用接口的方式调用远程服务 ------ 利用动态调用服务,实现.net下类似Dubbo的玩法。
分布式微服务现在成为了很多公司架构首先项,据我了解,很多java公司架构都是 Maven+Dubbo+Zookeeper基础上扩展的. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按 ...
- So easy Webservice 3.使用HttpClient工具调用Webservice接口
首先,看看webservice服务调用演示: a) 登录http://www.webxml.com.cn b) 单击手机查询服务 c) 选择要调用的方法 例如: getMobileCodeInfo 输 ...
- 通过HttpClient调用服务
/** * 通过HttpClient调用服务 * * @param url 路径 * data json数据 * @return */ //post请求方法public String sendItsm ...
- C#使用windows服务定时调用api接口
使用VS创建windows服务项目: 创建好项目 会出现一个设计界面 右键弹出对话框 选择添加安装程序 名字什么的自己可以改: 项目目录: 打开项目中的ProjectInstaller.Design ...
- 调用URL 接口服务
1.Net调用URL 接口服务 using System; using System.Collections; using System.Configuration; using System.Dat ...
- 一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务
今天给大家翻译一篇由ASP.NET首席开发工程师James Newton-King前几天发表的一篇博客,文中带来了一个实验性的产品gRPC-Web.大家可以点击文末的讨论帖进行相关反馈.我会在文章末尾 ...
随机推荐
- Shell - 文本处理
珠玉在前,不再赘言. 常用命令 LinuxShell文本处理工具集锦 数据工程师常用的Shell命令 文件和目录管理 简明教程 AWK简明教程 SED简明教程 命令详解 linux sort,uniq ...
- 自学vue笔记 (二) : 实例与生命周期
一: 什么是实例 我们说了,Vue 应用都应该从构建一个 Vue 实例开始.它管理着挂载在它身上的所有内容,因此实例是一个根实例, 所有的组件都应该挂载在根实例上面.创建一个 Vue 实例,需要通过 ...
- [EXP]Adobe ColdFusion 2018 - Arbitrary File Upload
# Exploit Title: Unrestricted # Google Dork: ext:cfm # Date: -- # Exploit Author: Pete Freitag of Fo ...
- ThreadLocal父子线程传递实现方案
介绍InheritableThreadLocal之前,假设对 ThreadLocal 已经有了一定的理解,比如基本概念,原理,如果没有,可以参考:ThreadLocal源码分析解密.在讲解之前我们先列 ...
- 常用的npm指令总结
一.安装指令,通常是全局安装 npm install <package name> -g 二.移除全局安装包 npm uninstall <package name> -g 三 ...
- 七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)
组合控件与WebControl控件的事件和属性相差不大组合控件,顾名思义就是把一些控件组合起来形成一个控件这个控件将包含这些控件称为他的子控件 CompositeControl类实现了INameCon ...
- MVCC浅析
在并发读写数据库时,读操作可能会不一致的数据(脏读).为了避免这种情况,需要实现数据库的并发访问控制,最简单的方式就是加锁访问.由于,加锁会将读写操作串行化,所以不会出现不一致的状态.但是,读操作会被 ...
- dfs问题总结
组合总和——给定元素不重复 需求:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candida ...
- 鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
1.Linux一般将文件可存取的身份分为三个类 别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限.其中 root 的权限最高. 2.在我们 ...
- 改BUG方法
---恢复内容开始--- 今天改了半天参数,后来发现原来是表设置错了,于是决定总结出遇到BUG时的方法,等下次再遇到BUG时,过一遍每个方法就会减少解决BUG的时间,话不多说,写 ①检查表.数据库是否 ...