SocketIO: ошибка веб-сокета при отправке больших нагрузок - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь отправить на сервер полезную нагрузку размером ~ 10 МБ .Каждый раз, когда я пытаюсь это сделать, библиотека сокетов 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 голосов
/ 12 июня 2019

Согласно журналу сбоев, я вижу, что сокет сбрасывается сервером. Поддерживает ли ваш сервер запись в блоках? Предложенный способ скопировать поток на Java таков:

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

Пожалуйста, проверьте на стороне вашего сервера, они могут получить OutOfMemoryError.

...