bitrich-info / xchange-stream

XChange-stream is a Java library providing a simple and consistent streaming API for interacting with Bitcoin and other crypto currency exchanges via WebSocket protocol. It is build on top of of XChange library providing new interfaces for streaming API. User can subscribe for live updates via reactive streams of RxJava library.
Apache License 2.0
416 stars 219 forks source link

Binance streaming stopped to work #140

Closed mahieddine closed 6 years ago

mahieddine commented 6 years ago

It seems like the binance streaming doesn't work anymore this is what i'm getting while running "BinanceManualExample.java" in the tests folder, the client just keep getting disconnected as soon as it gets connected

00:55:39.544 [main] DEBUG org.knowm.xchange.ExchangeFactory - Creating default exchange from class name
00:55:39.547 [main] DEBUG org.knowm.xchange.ExchangeFactory - Creating default exchange from class name
00:55:39.915 [main] DEBUG info.bitrich.xchangestream.binance.BinanceStreamingExchange - ExchangeMetaData [currencyPairs={}, currencies={}, publicRateLimits=null, privateRateLimits=null, shareRateLimits=false]
00:55:39.934 [main] DEBUG si.mazi.rescu.Config - Configuration from rescu.properties:
00:55:39.936 [main] DEBUG si.mazi.rescu.Config - httpConnTimeout = 30000
00:55:39.936 [main] DEBUG si.mazi.rescu.Config - httpReadTimeout = 30000
00:55:39.936 [main] DEBUG si.mazi.rescu.Config - proxyHost = null
00:55:39.936 [main] DEBUG si.mazi.rescu.Config - proxyPort = null
00:55:39.936 [main] DEBUG si.mazi.rescu.Config - ignoreHttpErrorCodes = false
00:55:39.966 [main] INFO  info.bitrich.xchangestream.binance.BinanceStreamingExchange - Calling Remote Init...
00:55:39.973 [main] DEBUG si.mazi.rescu.HttpTemplate - Executing GET request at https://api.binance.com/api/v1/exchangeInfo
00:55:41.490 [main] DEBUG si.mazi.rescu.HttpTemplate - Request http status = 200
00:55:42.441 [main] DEBUG si.mazi.rescu.HttpTemplate - Executing GET request at https://api.binance.com/api/v1/ticker/allPrices
00:55:42.711 [main] DEBUG si.mazi.rescu.HttpTemplate - Request http status = 200
00:55:43.011 [main] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Connecting to wss://stream.binance.com:9443/stream
00:55:44.484 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client connected!
00:55:44.485 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Subscribing to channel ethbtc@ticker
00:55:44.538 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Subscribing to channel ltcbtc@ticker
00:55:44.539 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Subscribing to channel ltcbtc@depth
00:55:44.543 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client received closing
00:55:44.547 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client disconnected!
00:55:44.547 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Reopening websocket because it was closed by the host
00:55:44.594 [nioEventLoopGroup-2-1] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Connecting to wss://stream.binance.com:9443/stream
00:55:45.784 [nioEventLoopGroup-2-2] INFO  info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client connected!
00:55:45.785 [nioEventLoopGroup-2-2] INFO  info.bitrich.xchangestream.binance.BinanceStreamingService - Resubscribing channels
00:55:45.785 [nioEventLoopGroup-2-2] INFO  info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client received closing
00:55:45.786 [nioEventLoopGroup-2-2] INFO  info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client disconnected!

How can i fix this ? thank you

trojanflash commented 6 years ago

This happens because of slash at the beginning. Quickfix attached, but i get the problem with encoding. binance-fix.zip

daniel-cohen commented 6 years ago

Noticed it yesterday too and couldn't figure out what I was doing wrong. The node.js library was connecting just find. Thanks for reporting.

mahieddine commented 6 years ago

thank you @trojanflash your patch fixed the connection issue but as you mentioned there is still this problem with the encoding (as it seems), maybe Binance changed the compression algorithm?

trojanflash commented 6 years ago

@mahieddine also fix the problem, see attach fixed-problem-with-websockets.zip

daniel-cohen commented 6 years ago

@trojanflash I'm still getting the wrong encoding messages with your last fix.

PS: With regards to your 1st fix, Isn't it just enough to strip the first "/":

    private BinanceStreamingService createStreamingService(ProductSubscription subscription) {
        String subs = buildSubscriptionStreams(subscription);
        //Strip the start:
        subs = subs .startsWith("/") ? subs .substring(1) : subs ;

        String path = API_BASE_URI + "stream?streams=" + subs;
        return new BinanceStreamingService(path, subscription);
    }
trojanflash commented 6 years ago

@daniel-cohen you can checkout my forked repository (https://github.com/trojanflash/xchange-stream) and run BinanceManualExample. There is some more changes there such as moving to xchange 4.3.4 ect... (code style a little bit corrupted)

trojanflash commented 6 years ago

@daniel-cohen

PS: With regards to your 1st fix, Isn't it just enough to strip the first "/": subs = subs .startsWith("/") ? subs .substring(1) : subs ;

i think it is a little bit ugly

mahieddine commented 6 years ago

thank you @trojanflash it worked perfectly so if i understand correctly the patch for the netty part, we were reading the message before uncompressing it right? Anyway once again thank you very much for your help, will you make a PR for that ?

trojanflash commented 6 years ago

@mahieddine welcome. There are a few changes in commit besides this fix, so i don't know whether my PR will be accepted.

daniel-cohen commented 6 years ago

@trojanflash Thanks for the fix! I had some time to check your fork today, got it working and extracted the code into a PR for this issue. Hope you don't mind.

trojanflash commented 6 years ago

@daniel-cohen no problem, glad to help

dozd commented 6 years ago

Thanks @daniel-cohen and @trojanflash

emmx commented 6 years ago

On what version was this merged? Was the fix released already? I'm still getting this error on 4.3.3-SNAPSHOT.

91743 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client connected!
91744 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.binance.BinanceStreamingService - Resubscribing channels
91744 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client received closing
91745 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client disconnected!
91745 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.binance.BinanceStreamingService - Reopening websocket because it was closed by the host
91745 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.binance.BinanceStreamingService - Connecting to wss://stream.binance.com:9443/stream
sekharsa82 commented 6 years ago

I also got the same error, frequency of getting this error is very high (atleast once in every 15/20 minutes). This is resulting inconsistent orderbook. Does anyone know whether fix was already applied.

08:21:20.883 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client received closing 08:21:20.887 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client disconnected! 08:21:20.887 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.binance.BinanceStreamingService - Reopening websocket because it was closed by the host 08:21:20.888 [nioEventLoopGroup-2-2] INFO info.bitrich.xchangestream.binance.BinanceStreamingService - Connecting to wss://stream.binance.com:9443/stream 08:21:21.715 [nioEventLoopGroup-2-3] INFO info.bitrich.xchangestream.service.netty.WebSocketClientHandler - WebSocket Client connected! 08:21:21.715 [nioEventLoopGroup-2-3] INFO info.bitrich.xchangestream.binance.BinanceStreamingService - Resubscribing channels

Thank you, I appreciate any help regarding this error.

belerweb commented 6 years ago

Still not work on develop branch. It seems to some commits( 78c57d9 ...) in pull request #142 no full merged.

logs

2018-07-24 17:00:00.925  INFO 5962 --- [cTaskExecutor-2] i.b.x.binance.BinanceStreamingExchange   : Calling Remote Init...
2018-07-24 17:00:04.146  INFO 5962 --- [cTaskExecutor-2] i.b.x.binance.BinanceStreamingService    : Connecting to wss://stream.binance.com:9443/stream
2018-07-24 17:00:06.251  INFO 5962 --- [ntLoopGroup-2-1] i.b.x.s.netty.WebSocketClientHandler     : WebSocket Client disconnected!
2018-07-24 17:00:06.252  INFO 5962 --- [ntLoopGroup-2-1] i.b.x.binance.BinanceStreamingService    : Reopening websocket because it was closed by the host
2018-07-24 17:00:06.255 ERROR 5962 --- [cTaskExecutor-2] .a.i.SimpleAsyncUncaughtExceptionHandler : Unexpected error occurred invoking async method 'public void com.idataitech.dcmh.market.Binance.run()'.

io.netty.handler.codec.CodecException: invalid WebSocket Extension handshake for "permessage-deflate; server_no_context_takeover; client_no_context_takeover"
    at io.netty.handler.codec.http.websocketx.extensions.WebSocketClientExtensionHandler.channelRead(WebSocketClientExtensionHandler.java:111) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1388) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1159) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1202) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:428) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1414) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:945) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:141) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]

2018-07-24 17:00:06.280  INFO 5962 --- [ntLoopGroup-2-1] i.b.x.binance.BinanceStreamingService    : Connecting to wss://stream.binance.com:9443/stream
2018-07-24 17:00:07.880  WARN 5962 --- [ntLoopGroup-2-2] i.b.x.binance.BinanceStreamingService    : Problem with reconnect

io.netty.handler.codec.CodecException: invalid WebSocket Extension handshake for "permessage-deflate; server_no_context_takeover; client_no_context_takeover"
    at io.netty.handler.codec.http.websocketx.extensions.WebSocketClientExtensionHandler.channelRead(WebSocketClientExtensionHandler.java:111) ~[netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1388) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1159) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1202) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:428) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1414) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:945) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:141) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.21.Final.jar:4.1.21.Final]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]

2018-07-24 17:00:07.904  INFO 5962 --- [ntLoopGroup-2-2] i.b.x.s.netty.WebSocketClientHandler     : WebSocket Client disconnected!
2018-07-24 17:00:07.904  INFO 5962 --- [ntLoopGroup-2-2] i.b.x.binance.BinanceStreamingService    : Reopening websocket because it was closed by the host
2018-07-24 17:00:07.904  INFO 5962 --- [ntLoopGroup-2-2] i.b.x.binance.BinanceStreamingService    : Connecting to wss://stream.binance.com:9443/stream
2018-07-24 17:00:09.518  WARN 5962 --- [ntLoopGroup-2-3] i.b.x.binance.BinanceStreamingService    : Problem with reconnect
belerweb commented 6 years ago

should not use WebSocketClientCompressionHandler.