binance-connector-java icon indicating copy to clipboard operation
binance-connector-java copied to clipboard

my websocket (running test url) automatically resets , calling closingCallback

Open naserkaka opened this issue 3 years ago • 5 comments

Hi I get this SocketException inside closingCallback after a sometime, maybe after aprox 30h running streaming the websocket.

Once I got this 3 times in a row, 1min after each time. I dont know why this happens ? I have deployed to GCP VM instance and I am running my websocket in a seperat Thread.

31-08-2022 17:07:02.087 261952625 [OkHttp https://testnet.binance.vision/...] ERROR c.b.c.c.utils.WebSocketConnection - [Connection 11] Failure java.net.SocketException: Connection reset at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478) at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472) at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70) at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1454) at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1065) at okio.InputStreamSource.read(JvmOkio.kt:90) at okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:129) at okio.RealBufferedSource.request(RealBufferedSource.kt:206) at okio.RealBufferedSource.require(RealBufferedSource.kt:199) at okio.RealBufferedSource.readByte(RealBufferedSource.kt:209) at okhttp3.internal.ws.WebSocketReader.readHeader(WebSocketReader.kt:119) at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:102) at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:293) at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:195) at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)

naserkaka avatar Sep 01 '22 20:09 naserkaka

The reason for the connection issue can be variable, please try to debug with different network.

2pd avatar Sep 02 '22 07:09 2pd

I am using 2 streams. 1 for streaming market prices and 1 for listenUserStream(events from my wallet,like when a trade is set or fulfilled…). The error I get is for the listenUserStream and that stream is using TESTNET_WSS_URL = “wss://testnet.binance.vision”

but when I stream market prices I use wss://stream.binance.com:9443 . I have not got error on this stream, seems to work fine. I only get error for the listenUserStream so it might have to do with the testnet url.

naserkaka avatar Sep 08 '22 21:09 naserkaka

Are you still seeing this error? can you share a gist for debug?

thanks

2pd avatar Sep 09 '22 04:09 2pd

@2pd

 try {
        onOpenCallbackDataUser = (message) -> {
            isWsUserDataStreamActive = true;
        };
        onMessageCallbackDataUser = (message) -> {
            try{
            Runnable task = () -> {
                checkUserData(message);
            };
            if (isUserDataThreadActive) {
                executorUserData.execute(task);
            }
        }catch(Exception e){
                logger.error("Inside UserStream onMessage():" + e.getMessage());
        }
        };
        try {
            onClosingCallbackDataUser = (message) -> {
                closeUserDataStreamAndThread("onClosingCallback:" + message);

            };
            onFailureCallbackMarketDataUser = (message) -> {
                logger.error("onFailureCallback() message:" + message);               
                closeUserDataStreamAndThread("onFailureCallback:" + message);

            };
        }catch(Exception e){
            logger.error("onFailureCallback() or closeCallback failure : " +e.getMessage());
            closeUserDataStreamAndThread("onFailureCallback() or closeCallback failure : " +e.getMessage());
        }
        wsUserData = wsClient2UserData.listenUserStream(listenKey, onOpenCallbackDataUser, 
          onMessageCallbackDataUser, onClosingCallbackDataUser, onFailureCallbackMarketDataUser);

    } catch (Exception e) {
        logger.error("Userdatastream() failed " + e.getMessage());
    }

}

naserkaka avatar Sep 17 '22 12:09 naserkaka

Hi, am I supposed to do keepAlive for keeping my streaming userData alive ? or it is automatically handled by this repo ?

https://binance-docs.github.io/apidocs/spot/en/#user-data-streams

naserkaka avatar Oct 18 '22 21:10 naserkaka