我有一个由broadcastreceiver
组成的应用程序,它在网络连接更改时被调用(基本上,我只想在连接到某个SSID时调用某些URL)。
我在挂起OkHttp请求时遇到了一个奇怪的问题。有时请求立即得到处理,有时需要10或20秒。我已经尝试为使用的OkHttpClient设置连接、读写超时,但没有成功。请求是在电话连接到网络之后发出的。我也尝试在延迟2秒的seperate线程中激发请求,但这并没有改变任何事情。
client = new OkHttpClient.Builder()
.writeTimeout(3, TimeUnit.SECONDS)
.readTimeout(3, TimeUnit.SECONDS)
.connectTimeout(3, TimeUnit.SECONDS)
.followRedirects(true)
.addNetworkInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Log.d(TAG, "Request to URL: " + request.url());
Response response = chain.proceed(request);
return response;
}
})
.build();
public void onReceive(Context context, Intent intent) {
/* ... */
client.newCall(new Request.Builder()
.url(url)
.build()).enqueue(/* logging callback with
Log.d(TAG, response.toString()); on success*/);
}
货单中的接收者
<receiver
android:name=".WifiReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
Logcat结果,注意时差
11-24 22:19:49.717 17511 17511 I WifiReceiver: -- Wifi connected ---
11-24 22:19:49.796 D WifiReceiver: Request to URL: http://172.217.22.78/
11-24 22:20:00.300 D WifiReceiver: Request to URL: http://www.google.com/
11-24 22:20:11.363 D WifiReceiver: Request to URL: http://www.google.de/?gfe_rd=cr&ei=gFk3WL3CDdHnugSQ262QCA
11-24 22:20:11.750 17511 18242 D WifiReceiver: Response{protocol=http/1.1, code=200, message=OK, url=http://www.google.de/SQ262QCA}
我刚刚验证了(通过添加一个自定义dns解析器)请求是否由于dns解析缓慢而阻塞。
11-24 22:29:39.317 D/WifiReceiver: Lookup 172.217.22.78
11-24 22:29:39.372 D/WifiReceiver: Request to URL: http://172.217.22.78/
11-24 22:29:39.425 D/WifiReceiver: Lookup www.google.com
11-24 22:29:49.953 D/WifiReceiver: Request to URL: http://www.google.com/
11-24 22:29:50.291 D/WifiReceiver: Lookup www.google.de
11-24 22:30:00.775 D/WifiReceiver: Request to URL: http://www.google.de/?gfe_rd=cr&ei=zVs3WLmoNdPLugTk8IKoCA
11-24 22:30:01.197 D/WifiReceiver: Response{protocol=http/1.1, code=200, message=OK, url=http://www.google.de/?gfe_rd=cr&ei=zVs3WLmoNdPLugTk8IKoCA}
问题内容: 我想创建一个非阻塞连接。像这样: 为此,我使用了另一个线程,无限循环和Linux epoll。像这样(伪代码): 如果我先运行服务器,然后运行客户端,那么一切正常。如果我先运行客户端,请稍等一会儿,再运行服务器,然后客户端将无法连接。 我究竟做错了什么?也许可以做不同的事情? 问题答案: 您应该使用以下步骤进行异步连接: 用创建套接字 开始与 如果返回值既不是也不是,则中止并返回错误
问题内容: 我想使用OkHttpClient加载URL,如果给定URL的网站以pdf内容类型响应,我将继续下载PDF,否则我想忽略响应。 我的问题是,我是否需要做一些特殊的事情来关闭请求/响应,或者如果我选择不读取响应字节流,是否需要做任何事情来表明我将不使用响应?如果没有,OkHttpClient何时关闭连接? 问题答案: 调用将释放响应所拥有的所有资源。连接池将使连接保持打开状态,但是如果未使
我想使用OkHttpClient加载一个url,如果给定url的网站以pdf内容类型响应,我将继续下载pdf,否则我想忽略响应。 我的问题是,我是否需要做任何特别的事情来关闭请求/响应,或者我是否需要做任何事情来表明如果我选择不读取响应字流,我将不会使用响应?如果没有,OkHttpClient何时关闭连接?
是否可以使用OkHttpClient限制活动连接的数量?所以,如果达到限制,就不会选择和建立新的连接? 我的应用程序同时启动多个连接。
我正在使用Phonegap-CLI(V5.4.0)和Phonegap-developer-app(Android和iOS,都是最新的)创建一个简单的跨平台应用程序。在我的应用程序中,我试图调用我实现的一个REST接口,我使用jQuery AJAX来实现这一点。不幸的是,这些电话似乎不起作用,我没有看到任何来电在我的控制台。(REST接口在我的机器上本地运行。)但是,我知道我的REST接口工作得很好
在阅读了Tomcat NIO连接器之后,我仍然不明白一件事:如果应用程序代码阻塞,即它阻塞从数据库读取、读取文件系统和调用外部web服务,那么NIO连接器是否有益? 例如,您有一个类似REST的API,它接收一个请求,从数据库中读取一些内容,并返回一个响应。它不使用Servlet3异步,它只是写入响应。 我没有找到NIO连接器使用的线程池的完整描述,但我认为它有一个处理请求的线程池,因此每个请求最