SocketIO:发送更大的有效负载时出现Web套接字错误

时间:2019-06-12 14:00:19

标签: java android socket.io connection

我正在尝试将大小为〜10MB 的有效负载发送到服务器。每次尝试执行此操作时,套接字io库都会崩溃,并显示以下崩溃日志。我不太确定为什么会崩溃以及如何修复它。将来,我们计划将数据传输任务移至 HTTP 协议,但现在我们必须使用套接字。

有什么主意该如何解决或避免该问题?

2019-06-12 15:39:44.927 24039-24055/com.hulu.mdm.agent D/com.hulu.mdm.internal.socketLogging.AndroidLoggingHandler: io.socket.client.Manager
2019-06-12 15:39:44.924 24039-24141/com.hulu.mdm.agent W/System.err: io.socket.engineio.client.EngineIOException: websocket error
2019-06-12 15:39:44.928 24039-24141/com.hulu.mdm.agent W/System.err:     at io.socket.engineio.client.Transport.onError(Transport.java:63)
2019-06-12 15:39:44.929 24039-24055/com.hulu.mdm.agent I/_MdmSocketImpl: Socket-Error occured!
2019-06-12 15:39:44.930 24039-24141/com.hulu.mdm.agent W/System.err:     at io.socket.engineio.client.transports.WebSocket.access$400(WebSocket.java:24)
2019-06-12 15:39:44.933 24039-24141/com.hulu.mdm.agent W/System.err:     at io.socket.engineio.client.transports.WebSocket$1$5.run(WebSocket.java:107)
2019-06-12 15:39:44.933 24039-24141/com.hulu.mdm.agent W/System.err:     at io.socket.thread.EventThread$2.run(EventThread.java:80)
2019-06-12 15:39:44.934 24039-24141/com.hulu.mdm.agent W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
2019-06-12 15:39:44.934 24039-24141/com.hulu.mdm.agent W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
2019-06-12 15:39:44.934 24039-24141/com.hulu.mdm.agent W/System.err:     at java.lang.Thread.run(Thread.java:764)
2019-06-12 15:39:44.935 24039-24141/com.hulu.mdm.agent W/System.err: Caused by: java.net.SocketException: Connection reset
2019-06-12 15:39:44.935 24039-24141/com.hulu.mdm.agent W/System.err:     at java.net.SocketInputStream.read(SocketInputStream.java:209)
2019-06-12 15:39:44.936 24039-24141/com.hulu.mdm.agent W/System.err:     at java.net.SocketInputStream.read(SocketInputStream.java:139)
2019-06-12 15:39:44.936 24039-24141/com.hulu.mdm.agent W/System.err:     at okio.Okio$2.read(Okio.java:139)
2019-06-12 15:39:44.936 24039-24141/com.hulu.mdm.agent W/System.err:     at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
2019-06-12 15:39:44.936 24039-24141/com.hulu.mdm.agent W/System.err:     at okio.RealBufferedSource.request(RealBufferedSource.java:67)
2019-06-12 15:39:44.937 24039-24141/com.hulu.mdm.agent W/System.err:     at okio.RealBufferedSource.require(RealBufferedSource.java:60)
2019-06-12 15:39:44.937 24039-24141/com.hulu.mdm.agent W/System.err:     at okio.RealBufferedSource.readByte(RealBufferedSource.java:73)
2019-06-12 15:39:44.937 24039-24141/com.hulu.mdm.agent W/System.err:     at okhttp3.internal.ws.WebSocketReader.readHeader(WebSocketReader.java:113)
2019-06-12 15:39:44.937 24039-24141/com.hulu.mdm.agent W/System.err:     at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.java:97)
2019-06-12 15:39:44.938 24039-24141/com.hulu.mdm.agent W/System.err:     at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.java:262)
2019-06-12 15:39:44.938 24039-24141/com.hulu.mdm.agent W/System.err:     at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:201)
2019-06-12 15:39:44.938 24039-24141/com.hulu.mdm.agent W/System.err:     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
2019-06-12 15:39:44.939 24039-24141/com.hulu.mdm.agent W/System.err:     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
2019-06-12 15:39:44.939 24039-24141/com.hulu.mdm.agent W/System.err:    ... 3 more
2019-06-12 15:39:44.953 24039-24055/com.hulu.mdm.agent I/_MdmSocketImpl: [io.socket.engineio.client.EngineIOException: websocket error]

1 个答案:

答案 0 :(得分:0)

根据崩溃日志,我可以看到服务器正在重置套接字。 您的服务器是否支持分块写入? 用Java复制流的建议方法是:

while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}

请在您的服务器端检查,他们可能正在获取OutOfMemoryError