Giter Site home page Giter Site logo

服务器重启,前端不会发启重连,是服务器需要告诉前端断连了吗?要重启app才能连接上。 about rxwebsocket HOT 21 CLOSED

synchroni avatar synchroni commented on May 18, 2024
服务器重启,前端不会发启重连,是服务器需要告诉前端断连了吗?要重启app才能连接上。

from rxwebsocket.

Comments (21)

dhhAndroid avatar dhhAndroid commented on May 18, 2024

服务器不用告诉前端断连,APP重启才能连上,说明APP端代码写的有问题,你先看下readme相关说明,是否是配置不对,导致没有重连。也可以把代码贴一下,我看看。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

初始化

Config config = new Config.Builder().setReconnectInterval(2, TimeUnit.SECONDS).build();
RxWebSocket.setConfig(config);

在onResume中

   RxWebSocket.get(WebSocketURL + SystemUtil.geDeviceSerial())
            .compose(RxLifecycle.with(this).<WebSocketInfo>bindToLifecycle())
            .subscribe(new WebSocketSubscriber() {

                @Override
                public void onOpen(@NonNull WebSocket webSocket) {
                    Log.e("JzgTV", "onOpen1:");
                    tv_reconnect.setVisibility(View.GONE);
                }

                @Override
                public void onMessage(@NonNull String text) {
                    Log.e("JzgTV", "返回数据:" + text);
                    if (CommonUtils.TextIsEmpty(text) && "jzgtv_success".equals(text) && !mFinish) {
                        //                            Router.newIntent(context).to(AgentWebViewActivity.class).launch();
                        Router.newIntent(context).to(WebViewActivity.class).launch();
                    }
                }

                @Override
                protected void onReconnect() {
                    Log.e("JzgTV", "重连:" + WebSocketURL + SystemUtil.geDeviceSerial());
                    tv_reconnect.setVisibility(View.VISIBLE);
                }

                @Override
                protected void onClose() {
                    Log.e("JzgTV", "onClose:");
                }
            });

@OverRide
protected void onDestroy() {
super.onDestroy();

    //注销
    Disposable disposable = RxWebSocket.get(WebSocketURL).subscribe();
    if (!disposable.isDisposed()) {
        disposable.dispose();
    }
}

就只有这些,你看对吗。

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

在onDestroy里的代码,不用写,你在onResume里用RxLifecycle的BindToLifecycle是自动注销的,RxLifecycle需要在application里初始化

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

Config配置没有加日志打印,你开启日志开关,看下日志

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

试试这个config,显示 RxWebsocket内部日志,并且有心跳检测

        Config config = new Config.Builder()
                .setShowLog(true)           //show  log
                .setClient(new OkHttpClient.Builder()
                        .pingInterval(3, TimeUnit.SECONDS) // 设置心跳间隔,这个是3秒检测一次
                        .build())   //if you want to set your okhttpClient
                .setReconnectInterval(1, TimeUnit.SECONDS)  //set reconnect interval
                .build();

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

加了,初始化也完成,我断网测试重连是有Log的,刚才我又重启了服务器,是没有任何Log过来,也没有任何回调。不能确定是否真的断连了。 但如果我重启app或者刷新一下生命周期,就能连上。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

好的。我试试

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

是否解决问题,都给我反馈一下,还有一种设置timeout的方式,也可以用的

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024
  • -、已按你说的全部设置,但没有重连,也没有Log和错误返回。

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

配合上面的config,获取Websocket的时候用这个方法:

   RxWebSocket.get(WebSocketURL + SystemUtil.geDeviceSerial(),10,TimeUnit.SECONDS)

还有你说的重启服务器,是把服务器关闭吗?还是说,服务器发送了一个关闭WebSocket的指令(服务端调用了websocket.close())?

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

我问过服务器,他说就是服务器关闭重启(就是重新布属服务器代码),没有特别发送指令说 close了。。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

但是服务器说当重启的时候能看到服务器那边的WebSocket默认会发送一条close命令,是WebSocket自已执行的。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

按照你说的 RxWebSocket.get(WebSocketURL + SystemUtil.geDeviceSerial(),10,TimeUnit.SECONDS) 这要样的意思是10秒重连一次吗?。我看log是这样的。这样是正常的吗?。是不管有没有连接都会十秒重连一次?.

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

差不多是这样,这个和ping/pong机制差不多,这个timeout是多少秒没有接收到数据,就重连一次,时间长短自己取舍。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

按照你最后的办法,现在服务器重启是可以重连了,但有一点就是我上面说的,已经连接成功的时候,会十秒一次的走onReconnect() 和onOpen()回调(注:先走onReconnect()再走onOpen())。这样会造成性能浪费吗。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

最开始的时候我集成的你的这个,可以不用这样就可以立马知道服务器重启,然后自动重启,不用加这个心跳机制,今天才突然发现这个问题的,刚开始集成的时候是没有问题的。- -。,

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

我这个库,在自己项目里使用,是可以重连的,断网、服务器重启我都试过,都是可以的。这个timeout,是在断网后,手机或平板设备响应不及时,没有及时发送连接失败通知(小米平板就是这样),导致重连不及时,我才做的这个timeout折中处理,这个会开启/关闭WebSocket,性能的话,应该影响不大,这个我没测过。但是框架内部是保证同一个url在同一时间是只有一个WebSocket连接的。如果真不行,你只能另觅他路了。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

服务器重启会发送Close()指令 ,你那边会吗?。

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

问你们服务端,我这边服务端不发送关闭命令,框架内部是接收到服务端的关闭指令,就关闭WebSocket,当时这样写的原因是,我认为服务端要关闭,就没有必要重连了。

from rxwebsocket.

synchroni avatar synchroni commented on May 18, 2024

现在十秒一次的访问 会出一个内部错误 E/JzgTV: java.io.IOException: closed/websocket/app/PFSNU17C21113716 知道这是啥原因吗,websocket/app/PFSNU17C21113716这一段是我url的参数。

from rxwebsocket.

dhhAndroid avatar dhhAndroid commented on May 18, 2024

这个我不清楚

from rxwebsocket.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.