Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在中使用OkHttp阻断器为每个api获取api请求和api响应时间?

如何在中使用OkHttp阻断器为每个api获取api请求和api响应时间?
EN

Stack Overflow用户
提问于 2019-10-17 01:48:29
回答 1查看 1.6K关注 0票数 0

我在BODY on Debug中借助OkHttp3阻断器获得了Api响应的响应时间,但我希望在发布时为每个api提供服务器响应时间,并希望将其上传到跟踪器中进行数据分析。我已经尝试过这两种方法1. Response.sentRequestAtMillis() 2. Response.receivedResponseAtMillis(),但是我没有成功,所以请帮助我找到每个api的响应时间--可以通过计算sentRequestAtMillis和receivedResponseAtMillis或直接获得响应Api示例(如(31 me ))中显示的响应时间。

Api请求 :-

代码语言:javascript
运行
AI代码解释
复制
D/OkHttp: --> POST http://api.globoapps.in/abc/updateUserDetail
D/OkHttp: Content-Type: application/json; charset=UTF-8
D/OkHttp: Content-Length: 208
D/OkHttp: {"androidId":"996e831d34ba64b0","id":4,"deviceToken":"abcd"}
D/OkHttp: --> END POST (208-byte body)

Api响应 :-

代码语言:javascript
运行
AI代码解释
复制
D/OkHttp: <-- 200 http://api.globoapps.in/abc/updateUserDetail (31ms)
D/OkHttp: Server: nginx/1.12.2
D/OkHttp: Date: Thu, 17 Oct 2019 09:30:24 GMT
D/OkHttp: Content-Type: application/json;charset=UTF-8
D/OkHttp: Transfer-Encoding: chunked
D/OkHttp: Connection: keep-alive
D/OkHttp: {"id":4,"status":"Success"}
D/OkHttp: <-- END HTTP (533-byte body)

代码(MainBaseApplication.java) :-

代码语言:javascript
运行
AI代码解释
复制
   public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {

            OkHttpClient.Builder httpClient = new OkHttpClient.Builder();


            httpClient.readTimeout(30, TimeUnit.SECONDS);
            httpClient.connectTimeout(30, TimeUnit.SECONDS);
            httpClient.writeTimeout(30, TimeUnit.SECONDS);

            httpClient.addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request original = chain.request();

                    Request.Builder builder = original.newBuilder();
                    builder.method(original.method(), original.body());
//                    builder.header("Accept", "application/json");
                    if (TOKEN.length() > 0)
                        builder.header("Authorization", TOKEN);
                    return chain.proceed(builder.build());
                }
            });

            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            if (BuildConfig.DEBUG) {
                interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            } else {
                interceptor.setLevel(HttpLoggingInterceptor.Level.NONE);
            }
            httpClient.addInterceptor(interceptor);

            OkHttpClient client = httpClient.build();
//            Response response = client.newCall(request).execute();
//             tx = response.sentRequestAtMillis();
//            rx = response.receivedResponseAtMillis();
//            System.out.println("response time : "+(rx - tx)+" ms");
            Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();

            retrofit = new Retrofit.Builder()
                    .baseUrl(WebAPI.BASE_URL)
                    .client(httpClient.build())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }
        return retrofit;
    }
EN

回答 1

Stack Overflow用户

发布于 2019-10-21 05:38:36

sentRequestAtMillisreceivedResponseAtMillis param指的是设备时间而不是服务器时间,如果您更改设备的时间,它也会更改为此值。

根据https://square.github.io/okhttp/4.x/okhttp/okhttp3/-response/received-response-at-millis/的说法,它是缓存的时间戳,所以这个方法不适合你。

用于您的解决方案:,您必须从发送时间戳,您可以从api的响应中获得这个参数,并且可以使用它。

如果您希望获得像31 ms 这样的毫秒响应,您可以重写类HttpLoggingInterceptor.kt,并在222行号中检查变量val tookMs,这将返回您想要的ms。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58429689

复制
相关文章
基于运动矢量重用的转码优化
 点击上方“LiveVideoStack”关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 编者按:视频转码是视频相关领域中最重要的业务,需要消耗大量的算力。转码有解码和编码两个阶段,在编码中,运动矢量计算是消耗CPU算力最多的部分,因此要考虑如何减少大量的计算并提高图像质量。LiveVideoStack邀请到了英特尔的谢义老师,为我们介绍基于运动矢量重用的转码优化。 文/谢义 整理/LiveVideoStack 大家好!我是谢义,来自英特尔亚太研发有限公司。我们团队主要负责基于至强
LiveVideoStack
2023/02/23
4770
基于运动矢量重用的转码优化
结构体位域
  例如下列结构体内的变量使用了位域,占用空间只有1字节(8bit)。相对于不使用位域的缩少了3字节(24bit)的数据。
Qt君
2019/10/12
5140
C结构体位域
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。
CtrlX
2023/03/21
1770
C结构体位域
卫星互联网中的高轨卫星和低轨卫星是啥情况?
从全球网络覆盖面积来看,目前尚有80%以上的陆地区域和95%以上的海洋区域没有地面网络覆盖。非地面网络(NTN)是地面蜂窝通信技术的重要补充,是手机直连卫星的技术方向之一。
通往ICT之路
2024/04/24
3.2K0
卫星互联网中的高轨卫星和低轨卫星是啥情况?
基于Docker的FRP内网穿透部署
Power
2025/03/04
690
C结构体位域
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。
CtrlX
2023/03/08
2660
C结构体位域
基于事件的光流矢量符号体系结构
Vector-Symbolic Architecture for Event-Based Optical Flow
CreateAMind
2024/07/05
1390
基于事件的光流矢量符号体系结构
基于Python的Tensorflow卫星数据分类神经网络
深度学习已经占据了解决复杂问题的大多数领域,地理空间领域也不例外。文章的标题让您感兴趣,因此希望熟悉卫星数据集 ; 目前,Landsat 5 TM。机器学习(ML)算法如何工作的知识很少,将帮助快速掌握这本动手教程。对于那些不熟悉ML概念的人,简而言之,它是建立一个实体的一些特征(特征或X)与其他属性(值或标签或Y)之间的关系 - 提供了大量的例子(标记数据) )到模型,以便从中学习,然后预测新数据(未标记数据)的值/标签。这对于机器学习来说已经足够理论了!
代码医生工作室
2019/09/16
3.3K0
基于Python的Tensorflow卫星数据分类神经网络
redis穿透 击穿_redis缓存穿透和雪崩
大家好,又见面了,我是你们的朋友全栈君。​ 1、redis雪崩、穿透、击穿的原因和解决方案 1)雪崩:多个key在某一时间同时失效,导致数据库压力过大 解决方案:不同的key设置不同的过期时间,尽量错开 2)穿透:在访问某个key时缓存中不存在,导致每次查询都会访问数据库 解决方案:第一次访问时如果key不存在,则在缓存中设置一个空值,并设置较短的过期时间 3)击穿:单个key缓存突然失效,这时大量的请求进行访问,导致数据压力过大 解决方案: 1、双重检索机制:某个key只让一个线程查询,阻塞其他线程
全栈程序员站长
2022/10/05
6010
Redis 的雪崩、穿透和击穿
  雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。
码客说
2023/04/01
2830
一个基于 .NET 开源免费的异地组网和内网穿透工具
今天大姚给大家分享一个基于 .NET 开源免费的异地组网和内网穿透工具:linker。
追逐时光者
2025/03/28
1900
一个基于 .NET 开源免费的异地组网和内网穿透工具
3D矢量和6D矢量机器人建模的对比
基于6D矢量的机器人动力学是由学者Featherstone首先提出,并被机器人其他很多动力学建模软件广泛应用。包括开源机器人软件kdl.
ZC_Robot机器人技术
2020/10/24
3.3K3
3D矢量和6D矢量机器人建模的对比
位图图像和矢量图像
位图是由像素(Pixel)组成的,像素是位图最小的信息单元,存储在图像栅格中。 每个像素都具有特定的位置和颜色值。按从左到右、从上到下的顺序来记录图像中每一个像素的信息,如:像素在屏幕上的位置、像素的颜色等。位图图像质量是由单位长度内像素的多少来决定的。单位长度内像素越多,分辨率越高,图像的效果越好。位图也称为“位图图像”“点阵图像”“数据图像”“数码图像”。
用户7657330
2021/02/02
1K0
开发丨图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法
近年来,卷积神经网络(CNN)以其局部权值共享的特殊结构在语音识别和图像处理等方面得到了快速发展,特别是大型图像处理方面,更是表现出色,逐渐成为了行业内一个重要的技术选择。 不过,好用并不代表万能。这里 AI 科技评论从一个卫星图像分析的具体实例出发,介绍了CNN建模和本地拉普拉斯滤波这两种分析技术的效果对比,最终我们发现,本地拉普拉斯滤波的效果反而更好。 卷积神经网络 为了从卫星图像中分析和评估一项自然灾害造成的损失,首先需要得到相关地理区域实时的高分辨率的卫星图像,这是进行后续所有分析的数据基础。目
AI科技评论
2018/03/09
1.4K0
开发丨图像处理一定要用卷积神经网络?这里有一个另辟蹊径的方法
进展:基于Himawari-8卫星的云参数综合反演
云覆盖地球表面的三分之二以上,是地球-大气系统的重要组成部分。云参数反演的必要性体现在以下三个方面:①云是气候预测和模拟不确定性的重要来源;云对地球辐射收支的影响,取决于云顶高度(CTH)、云相态、云光学厚度(τ)和云顶粒子有效半径(Re)等物理参数。②在分析气溶胶-云-降水-气候相互作用,特别是城市化和人为气溶胶排放对海洋层积云、浅对流云和暖雨过程的影响时,CTH、τ和Re也是主要工具。③云相态、τ和Re是目前主要快速辐射传输模式(如CRTM、RTTOV)进行云内辐射传输模拟的基本参数;提供精确的云相态、τ和Re观测,是提高云区辐射资料同化的关键。
气象学家
2020/10/09
2.5K0
进展:基于Himawari-8卫星的云参数综合反演
位图和矢量图区别
位图和矢量图是计算机图形中的两大概念,这两种图形都被广泛应用到出版,印刷,互联网[如flash和svg]等各个方面,他们各有优缺点,两者各自的好处几乎是无法相互替代的,所以,长久以来,矢量跟位图在应用中一直是平分秋色。
全栈程序员站长
2022/09/20
1.2K0
ICCV 2021 Oral | 基于点云的类级别刚体与带关节物体位姿追踪
导读:本文是计算机视觉领域顶级会议 ICCV入选论文《基于点云的类级别刚体与带关节物体位姿追踪(CAPTRA: CAtegory-level Pose Tracking for Rigid and Articulated Objects from Point Clouds)》的解读。该工作由北京大学前沿计算研究中心陈宝权课题组与斯坦福大学/北京大学王鹤等合作完成,论文共同一作翁伊嘉为2021届图灵班学生。
AI科技评论
2021/09/16
5550
泛广电领域的卫星传输和公网传输
大家好,我是来自安徽广播电视台的张博力,接下来我将为大家详细介绍泛广电领域的卫星传输和公网传输。
LiveVideoStack
2019/11/13
9390
泛广电领域的卫星传输和公网传输
基于TensorFlow的循环神经网络生成矢量格式的伪造汉字
注意:对于中文汉字和日文汉字我根据具体情况交替使用它们。
花落花飞去
2018/02/08
2.8K0
基于TensorFlow的循环神经网络生成矢量格式的伪造汉字
基于HT for Web矢量实现2D叶轮旋转
之前在拓扑上的应用都是些静态的图元,今天我们将在拓扑上设计一个会动的图元——叶轮旋转。 我们先来看下这个叶轮模型长什么样 从模型上看,这个叶轮模型有三个叶片,每一个叶片都是不规则图形,显然无法用上我们
HT for Web
2018/01/03
7760
基于HT for Web矢量实现2D叶轮旋转

相似问题

统一更改GameObject颜色(c#)

25

GameObject不包含TryGetComponet的def?统一

13

统一GameObject速度与动画问题

12

网络凸轮的统一许可

12

C#统一-识别影响GameObject的方法

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档