如何使用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 ThreadPoolExecutor
和 HttpUrlConnection
相比做得很差:对于所有 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的主要内容,如果未能解决你的问题,请参考以下文章