如何为 AndroidAsync websockets 设置超时?
Posted
技术标签:
【中文标题】如何为 AndroidAsync websockets 设置超时?【英文标题】:How are timeouts set for AndroidAsync websockets? 【发布时间】:2015-04-09 20:20:05 【问题描述】:我正在尝试更改默认的 androidAsync websocket 初始连接超时 30 秒。这是默认超时的工作版本:
AsyncHttpClient.getDefaultInstance().websocket(connectionURI.toString(), null, this);
我想更改超时。这是我期望的工作:
int timeout_ms = 20000;
AsyncHttpGet request = new AsyncHttpGet(connectionURI.toString());
request.setTimeout(timeout_ms);
AsyncHttpClient.getDefaultInstance().websocket(request, null, this);
这会导致java.lang.IllegalArgumentException: invalid uri=ws://exampleserver.com:80/test middlewares=[com.koushikdutta.async.http.HttpTransportMiddleware@1e2543c8, com.koushikdutta.async.http.spdy.SpdyMiddleware@2534fc61, com.koushikdutta.async.http.AsyncSocketMiddleware@107b3386]
请注意,完全相同的 connectionURI 字符串在第一种情况下是成功的,但不是在第二种情况下。
有没有办法改变 AndroidAsync websocket 的超时时间?
【问题讨论】:
【参考方案1】:这个 hack 帮助了我。你需要通过 http 或 htpps 协议。
AsyncHttpGet request = new AsyncHttpGet("ws://xxx.xxx.x.xx:8500".replace("ws://", "http://").replace("wss://", "https://"));
request.setTimeout(3000);
AsyncHttpClient asyncHttpClient = AsyncHttpClient.getDefaultInstance();
asyncHttpClient.websocket(request, null, webSocketConnectCallback);
【讨论】:
【参考方案2】:这似乎是 Koush 未解决的问题 https://github.com/koush/AndroidAsync/issues/340
【讨论】:
这个问题和超时问题有什么关系?以上是关于如何为 AndroidAsync websockets 设置超时?的主要内容,如果未能解决你的问题,请参考以下文章
Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)