如何使用Retrofit请求非Restful API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Retrofit请求非Restful API相关的知识,希望对你有一定的参考价值。

参考技术A 查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id =

如何使用 Retrofit / OkHttp 更快地发出并发请求?

【中文标题】如何使用 Retrofit / OkHttp 更快地发出并发请求?【英文标题】:How can I make concurrent requests faster with Retrofit / OkHttp? 【发布时间】:2017-06-17 01:19:36 【问题描述】:

我需要在 Android 中使用 Retrofit 尽快发出 50 个 http GET 请求。我正在使用带有 OkHttp 的改造。目前,Retrofit 与普通 Java ThreadPoolExecutorHttpUrlConnection 相比做得很差:对于所有 50 个请求,Retrofit 大约需要 50 秒,普通 HttpUrlConnection 大约需要 30 秒,如果我为 ThreadPoolExecutor 和 Retrofit / OkHttp 设置池大小 20我设置了okHttpClient.dispatcher().setMaxRequests(20);

如果我查看 logcat,我可以看到无论我在 setMaxRequests() 中设置什么,Retrofit 最多执行 5 个并发请求,而在 ThreadPoolExecutor 中,并发请求的数量与可用的工作线程一样多。

我可以做些什么来加快改造速度?我不想切换到HttpUrlConnection,因为 Retrofit 非常优雅且易于使用。

编辑 1

我尝试向 OkHttp 提供自定义 ThreadPoolExecutor,但没有时间改进:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
ExecutorService exec = new ThreadPoolExecutor(20, 20, 1, TimeUnit.HOURS, new LinkedBlockingQueue<>());
Dispatcher d = new Dispatcher(exec);
builder.dispatcher(d);
OkHttpClient okHttpClient = builder.build();
okHttpClient.dispatcher().setMaxRequests(20);

编辑 2

如果这很重要,我会向同一个端点发出所有请求

【问题讨论】:

我会考虑将其作为错误请求发布在这里:github.com/square/retrofit 希望从开发人员那里得到一些反馈 您好,请问您为解决此问题做了哪些工作?无论我们设置多少默认为 5 个连接,甚至都面临同样的问题 【参考方案1】:

既然都去同一个主机,你试过了吗:

okHttpClient.dispatcher().setMaxRequestsPerHost(20);

Dispatcher.setMaxRequestsPerHost

【讨论】:

以上是关于如何使用Retrofit请求非Restful API的主要内容,如果未能解决你的问题,请参考以下文章

Android Retrofit 请求字符串(非JSON数据)

Retrofit初识

Android Retrofit详解

Retrofit的浅析 —— 针对面试

Android Retrofit详解

RESTful,Retrofit 2.0 使用教程