dhhAndroid / RxWebSocket

An auto reconnection-webSocket build with okhttp and rxJava
http://blog.csdn.net/huiAndroid/article/details/78071703
740 stars 114 forks source link

有发送成功的回调吗? #60

Closed wwdn closed 5 years ago

wwdn commented 5 years ago

有发送成功的回调吗?如果没有能否增加发送成功的回调?

dhhAndroid commented 5 years ago

这个还真没有,okhttp 里的也没有提供回调,是这样的,如果WebSocket连接已经打开,调用RxWebSocket.send()方法返回值 如果是true的,说明消息已经入列,或者你和你们后台定义一个小协议,就是你ssend数据后,服务端接收后,给你返回一个tag,利用发送消息后是否收到tag也是可以的

wwdn commented 5 years ago

好的 谢谢 我想问下 mainactivity onPause的状态下 会onClose吗?

wwdn commented 5 years ago

或者说 我自身应用在后台运行 是否会执行onClose?

dhhAndroid commented 5 years ago

好的 谢谢 我想问下 mainactivity onPause的状态下 会onClose吗?

RxWebSocket的开关是由你自己控制的,这个框架基于RxJava写的,如果你不主动关闭,框架是不会关闭的,至于在后台运行,要看你的应用保活了,都是不会主动关闭的。你看下demo,或者开一下我的另外一个框架RxLife

wwdn commented 5 years ago

您好!我在测试的,当我打开第三方应用,会执行onClose。我没有手动取消,我的应用也在后台运行。并没有kill掉

dhhAndroid commented 5 years ago

调用代码粘贴一下

wwdn commented 5 years ago

您好!我想问下 发送数据有限制吗?或者发送byte的时候有限制吗?我在测试的时候,发送一个50K的图片重连了,是否有设置发送数据的限制?

dhhAndroid commented 5 years ago

无代码,问题描述无法定位问题

wwdn commented 5 years ago

您好!再次感谢!数据限制问题解决了 主要服务端的接受数据使用的默认的buffersize,修改下就好了,至于close我在看看

wwdn commented 5 years ago

当我websocket 连接initWeb放在button1里点击连接,点击button2打开第三方应用会执行close方法。当websocket 连接initWeb放在oncreate里,进入就执行连接,点击button2打开第三方应用不会执行close方法。 总结:主动连接,打开第三方应用会执行close方法,被动不会。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button1 = (Button) findViewById(R.id.btn);
    button1 .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

// initWeb(); } }); initWeb(); Button button2 = (Button) findViewById(R.id.btn2); button2 .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //打开第三方应用 Intent intent = new Intent(OPEN_MODEL_APP); startActivity(intent); } }); } //websocket 连接 private void initWeb() { webSocketSubscriber = new WebSocketSubscriber() { @Override protected void onOpen(WebSocket webSocket) { super.onOpen(webSocket); LogUtil.log("----onOpen " + webSocket.toString()); }

        @Override
        protected void onMessage(String text) {
            super.onMessage(text);
            LogUtil.log("----onMessage " + text);
        }

        @Override
        protected void onMessage(ByteString byteString) {
            super.onMessage(byteString);
            LogUtil.log("----onMessage byteString" + byteString);
        }

        @Override
        protected void onReconnect() {
            super.onReconnect();
            LogUtil.log("----onReconnect ");
        }

        @Override
        protected void onClose() {
            super.onClose();
            LogUtil.log("----onClose ");
        }

        @Override
        public void onError(Throwable e) {
            super.onError(e);
            LogUtil.log("----onError " + e.toString());
        }
    };
    RxWebSocket.get("url")
            .compose(RxLifecycle.with(this).<WebSocketInfo>bindToLifecycle())
            .subscribe(webSocketSubscriber);
}
dhhAndroid commented 5 years ago
    RxWebSocket.get("url")
            .compose(RxLifecycle.with(this).<WebSocketInfo>bindOnDestroy())
            .subscribe(webSocketSubscriber);

是那个bindtoLifecycle导致的,用 bindOnDestroy 会在界面销毁的时候,自动关闭,这是RxLifecycle库里的功能,不是bug,你用的姿势不对。

wwdn commented 5 years ago

好的 谢谢