【问题标题】:Facing java.net.SocketTimeoutException using mobilefirst 6.3 for hybrid app面对 java.net.SocketTimeoutException 使用 mobilefirst 6.3 混合应用程序
【发布时间】:2015-12-15 10:33:13
【问题描述】:

我正在使用 MF 6.3 开发一个混合应用程序。当我通过请求数据时,我遇到了 java 套接字超时问题 适配器。这并不一致。它发生 3-4/10 次。我也有 看到github中提到的相同问题 https://github.com/google/google-http-java-client/issues/146 但有 没有解决方案。

我使用的是 60 秒的适配器超时,而这个异常发生在 10 秒内。

为日志附加 logcat。

09-18 15:07:29.561: I/System.out(10667): pool-6-thread-2 调用 分离()

09-18 15:07:39.146: I/System.out(10667): pool-6-thread-5 调用 分离()

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667): WLNativeXHRPlugin$NativeXHRPostListener.onException 在 WLNativeXHRPlugin.java:154 :: onException

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667): java.net.SocketTimeoutException: 读取超时

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:728)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.client.DefaultRequestDirector.executeOriginal(DefaultRequestDirector.java:1351)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:700)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:691)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:514)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 com.worklight.wlclient.WLHybridRequestSender.run(WLHybridRequestSender.java:63)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)

09-18 15:07:39.166: E/com.worklight.androidgap.plugin.WLNativeXHRPlugin(10667):在 java.lang.Thread.run(Thread.java:818)

09-18 15:07:39.176: E/NONE(10667): [/apps/services/api/SCBBizNet/android/query] 主机没有响应。 尝试通过android模拟器浏览器手动访问URL 验证连接性。

【问题讨论】:

  • 适配器请求去哪儿了?
  • 我正在通过适配器调用 java web 服务,返回 json 格式的结果。
  • 使用 Wireshark 从成功和失败尝试中收集网络流量日志。让我们看看网络告诉我们什么。
  • 该场景仅适用于移动设备。我正在使用三星 Galaxy S4。这种情况下该如何处理?
  • 按照指示。在安装服务器的主机上安装 Wireshark,并观察您使用的特定端口在失败和成功期间的网络流量。

标签: android exception timeout ibm-mobilefirst


【解决方案1】:

解决了! 我们调用WL.Logger.send() 用于在$.getJson 中发送日志,它会加载配置json 文件,我们基于该文件将日志发送到服务器。在这一步之后,我们退出$.getJson 回调并调用适配器来加载页面数据。整个事件发生在单击按钮上。如果我们删除 $.getJson 并调用 WL.Logger.send() 它不会给出任何 Socket 超时异常。

但是,这个问题似乎很不寻常,因为在 $.getJson 内部调用 WL.Logger.send() 之后,随后的适配器调用失败 10 次中有 5-6 次失败,导致超出适配器层的套接字超时异常。此异常在 android 中更常见,在 iOS 中较少。我们正在进一步调查$.getJson引起的问题。将发布更新。

【讨论】:

  • 有这方面的消息吗?
  • 也解决了...我有一系列上传数据到 MFP 服务器,当这从它的承诺中解决时开始另一个上传(图像),而 Angular JS 应用程序更改页面并且更多读取请求是向 MFP 发出。不知何故,这可能会使客户端陷入某种死锁,从而导致超时。我的解决方案是不调用该函数直接从解析函数上传图像,而是使用内部事件来触发上传。完美无缺。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多