Android 和 ktor 的 HTTP 块请求

news2024/12/23 14:09:50

Android 和 ktor 的 HTTP 块请求

logo
在这篇非常短的文章中,我将简要解释什么是块或流式 HTTP 请求,使用它有什么好处,以及它在 Android 中的工作原理。

Android 应用程序使用 HTTP 请求从后端下载数据。此信息在应用程序上存储和处理以使其正常运行。

HTTP 请求在 Android 上使用不同的框架执行。最常见的是 Retrofit 或 OkHttp。

简化底层网络操作,在识别托管请求 URL 的计算机的 IP 地址后,HTTP 请求如下所示:

OkHttpClient: --> GET https://api.yourserver.com/sandbox/v1/example/23aa13d2-b161-432d-a67e-c50e8783f7dd http/1.1
OkHttpClient: X-apikey: AATR1oqYAZzp6o6ndALfIk6GG1dOcDED
OkHttpClient: Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRw...
OkHttpClient: Accept-Language: en-US
OkHttpClient: Connection: close
OkHttpClient: Accept: application/json
OkHttpClient: Accept-Charset: UTF-8
OkHttpClient: User-Agent: Ktor client
OkHttpClient: Host: api.yourserver.com
OkHttpClient: Accept-Encoding: gzip
OkHttpClient: --> END GET

HTTP 请求包含(除其他外)以下字段:

  • 使用的 HTTP 方法:GET、POST、PUT、PATCH 或 DELETE。实际上有 8 种不同的 HTTP 方法,剩下的是 CONNECT、OPTIONS 和 TRACE。
  • 授权标头(比如 API 密钥,或者我们需要将自己标识为 lefit 客户端的 Auth 密钥)。
  • 用于编码、语言、字符集、内容类型等的元数据标头。

HTTP 1.1 协议的完整规范可以在RFC 2616中找到,而 HTTP 1.0 规范可以在RFC 1945中找到。
在多个 SDK 为我们提供抽象层并简化这些操作的世界中,可能不需要经常检查 RFC。例如,Android 开发人员可以从使用已经提供所有必需实现的多个框架(Retrofit、OkHttp、Ktor 等)中受益。这并不总是这样:在以前,有必要以一定的频率检查 RFC,因为功能完整的 SDK 并不总是在每个堆栈上可用。

执行标准 HTTP 请求在较高级别工作,如下所示:
web request flow
后端处理完请求后,立即将请求返回给客户端。这适用于大多数情况,但在某些情况下我们希望进一步优化。

想象一个包含复杂逻辑的端点,最终需要更多时间才能准备好完整数据。或者端点可能依赖于进一步的子查询来准备整个数据,这将需要一些时间才能准备好。在这种情况下,可能值得考虑使用块(或流式)请求。

HTTP Streaming 是一种数据传输技术,它允许后端通过无限期保持打开状态(或直到数据被处理)的单个 HTTP 连接向客户端连续发送数据块。像这样的请求有利于允许客户端立即处理某些数据,而后端处理其余数据。

这可能会提醒读者使用套接字。HTTP 和套接字的工作方式类似,尽管它们之间存在一些差异。

  • Websockets 是事件驱动的,而 HTTP 不是。通常,实时通信的最佳选择是套接字,因为它们初始化和维护连接的开销较小。
  • 套接字是一种全双工异步消息传递机制。客户端和服务器都可以独立地交换消息。

但是,在某些情况下,使用 HTTP 流式请求可能更方便。从基础设施到重用 HTTP 客户端已经处理的某些模型,问题可能很广泛。

Ktor 支持这种相对开箱即用的方式。以下代码段能够执行来自给定 API 的流式请求:

fun main() {
    val client = HttpClient(CIO)
    val file = File.createTempFile("files", "index")


    runBlocking {
        client.prepareGet("https://api.example.com").execute { httpResponse ->
            val channel: ByteReadChannel = httpResponse.body()
            while (!channel.isClosedForRead) {
                val packet = channel.readRemaining(DEFAULT_BUFFER_SIZE.toLong())
                while (!packet.isEmpty) {
                    val bytes = packet.readBytes()
                    file.appendBytes(bytes)
                    println("Received ${file.length()} bytes from ${httpResponse.contentLength()}")
                }
            }
            println("A file saved to ${file.path}")
        }
    }
}

要验证这是否有效,您可以使用类似于以下命令的命令对流式 API 执行 cURL:

curl --location --request GET 'https://api.example.com' --header 'X-apikey: yourAPIkey' --raw

当您执行此操作时,故事会出现一个有趣的转折。您将能够像往常一样看到来自后端的响应,但这次每个块将由一个数字分隔,指定下一个块的大小:
chunk stream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机内存取证之BitLocker恢复密钥提取还原

BitLocker是微软Windows自带的用于加密磁盘分卷的技术。 通常,解开后的加密卷通过Windows自带的命令工具“manage-bde”可以查看其恢复密钥串,如下图所示: 如图,这里的数字密码下面的一长串字符串即是下面要提取恢复密钥。 在计…

chatgpt赋能python:Python编程教程之抽签程序

Python编程教程之抽签程序 介绍 对于喜欢玩抽签、体育彩票等游戏的人来说,抽签程序是一款非常有用的小工具。抽签程序可以用来随机抽取一定数量的幸运儿,而且运行速度快,结果随机性高,不需要人工干预。 那么,Python…

Spring Boot 3.1 中如何整合Spring Security和Keycloak

在今年2月14日的时候,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器。其中包括Spring Security和Spring Boot的适配器,这意味着今后Keycloak团队将不再提供针对Spring Security和Spring Boot的集成方案。 但是,如此强大的Keycloak&am…

一文搞懂Android动画

这里写目录标题 前言一、视图动画1. 补间动画---Animation抽象类动画1.1 AlphaAnimation:控制一个对象透明度的动画。1.1.1 xml实现示例1.1.2 java实现示例 1.2 RotateAnimation:控制一个对象旋转的动画。1.1.1 xml实现示例1.1.2 java实现示例 1.3 Scale…

Linux中查看端口被哪个进程占用、进程调用的配置文件、目录等

1.查看被占用的端口的进程,netstat/ss -antulp | grep :端口号 2.通过上面的命令就可以列出,这个端口被哪些应用程序所占用,然后找到对应的进程PID 3.根据PID查询进程。如果想详细查看这个进程,PID具体是哪一个进程,可…

Qt6.5.1+WebRTC学习笔记(八)开发环境搭建(win10+vs2019)

一、准备 1.操作系统win10 64位 2.合理的上网方式,需要正常访问google,最好有20G以上流量 3.安装VS2019,笔者使用的是社区版,并选中C相关,笔者设置如下 注意,win10的sdk需要是10.0.20348.1,其他版本可能…

JavaWeb17(过滤器监听器)

目录 1.过滤器/拦截器-Filter. 1.1过滤器介绍. 1.2过滤器使用步骤. 1.2.1创建过滤器. 1.2.2映射配置. 1.3案例1-编码设置. 1.4案例2-登陆状态验证. 1.4过滤链-略带. 2.监听器-Listener. 2.1监听器介绍. 2.2案例演示1-统计在线人数. 2.3案例演示2-统计历史在线人数.…

太好玩了!用Python做音乐节奏可视化!

大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送。&#x1f44…

【Python C扩展】零基础也能轻松掌握的学习路线与参考资料

Python C扩展是将Python语言与C语言相结合,最大限度地利用C语言的高性能和Python语言的灵活性,使Python程序获得更高的运行效率。Python C扩展的学习路线涵盖了C语言基础、Python语言、Python C API等多个方面。下面将详细介绍Python C扩展的学习路线&am…

Python+Yolov5人脸表情特征识别

程序示例精选 PythonYolov5人脸表情特征识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5人脸表情特征识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

【微服务架构】专家组:在过去十年的微服务中,我们学到了什么?

瓦特&#xff08;Watt&#xff09;&#xff1a;这是微服务专家组。Chris早些时候谈到了最小化微服务中的设计时耦合。他是microservices.io的创建者&#xff0c;《微服务模式》一书的作者。他也是Java冠军&#xff0c;在微服务领域非常有经验。我期待着与你们一起深入研究其中的…

区间预测 | MATLAB实现基于QRCNN-BiLSTM-Multihead-Attention卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测

区间预测 | MATLAB实现QRCNN-BiLSTM-Multihead-Attention卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN-BiLSTM-Multihead-Attention卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测效果一览基本介绍模型描述…

chatgpt赋能python:Python冒泡排序:理解流程图

Python冒泡排序&#xff1a;理解流程图 当涉及到排序算法时&#xff0c;Python中最流行的算法之一就是冒泡排序。它是一种简单而有效的排列方法&#xff0c;旨在让列表中的元素按升序或降序排列。在此文章中&#xff0c;我们将讨论冒泡排序的流程图&#xff0c;并重点介绍每个…

JavaWeb18(文件上传富文本编辑器)

目录 一、富文本编辑器 1.1 什么是富文本编辑器? 1.2 CKEditor 1.3 CKEditor 4的使用步骤【参考官方文档】 1.4 优化商品增加、查看、修改功能 1.5 尝试课外扩展其他富文本编辑器 二、文件上传 2.1 到底客户端的文件是上传到哪里? 2.2 SmartUpload是什么? 2.3 Sma…

聚观早报 |ChatGPT之父称AI可能灭绝人类;Kindle本月关闭电子书店

今日要闻&#xff1a;马斯克到访特斯拉上海超级工厂&#xff1b;ChatGPT之父称AI可能灭绝人类&#xff1b;Kindle本月关闭电子书店&#xff1b;FF91将进入交付阶段&#xff1b;iPhone14最高降1900元 马斯克到访特斯拉上海超级工厂 6 月 1 日消息&#xff0c;据航班APP信息显示…

记录--面试官:“你知道什么情况下 HTTPS 不安全么”

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 面试官&#xff1a;“HTTPS的加密过程你知道么&#xff1f;” 我&#xff1a;“那肯定知道啊。” 面试官&#xff1a;“那你知道什么情况下 HTTPS 不安全么” 我&#xff1a;“这....” 越面觉得自己越…

LEAP模型(能源环境发展、碳排放建模预测及不确定性分析)

在国家“3060”碳达峰碳中和的政策背景下&#xff0c;如何寻求经济-能源-环境的平衡有效发展是国家、省份、城市及园区等不同级别经济体的重要课题。根据国家政策、当地能源结构、能源技术发展水平以及相关碳排放指标制定合理有效的低碳能源发展规划需要以科学准确的能源环境发…

在金融数据里挖呀挖,GaussDB开出了花

北京是首都&#xff0c;上海是魔都&#xff0c;那深圳是什么&#xff1f;如果在网上问这个问题&#xff0c;网友会告诉你&#xff0c;深圳是“搞钱之都”。 金融在深圳扮演着关键角色&#xff0c;金融产业的配套数字化基础设施地位也自然也非常重要。深圳的银行、券商等金融机构…

(2)NUC980 Uboot制作

目录&#xff1a; (1)NUC980 编译环境搭建 (2)NUC980 Uboot制作 (3)NUC 980 kenerl编译 u-boot&#xff1a; &#xff08;1&#xff09;下载u-boot: A:下载连接&#xff1a; 下载地址&#xff1a;https://gitee.com/OpenNuvoton/NUC970_U-Boot_v2016.11 文件&#xff1a;NUC97…

分布式存储ceph

ceph架构&#xff0c;三个默认接口&#xff08;块存储RBD&#xff0c;文件存储cephFS&#xff0c;对象存储RGW&#xff09; LibRADOS对象访问接口 RADOS基础存储系统&#xff08;统一存储池&#xff09; #最底层 ceph架构 osd&#xff0c;负责存储数据&#xff0c;一般一个…