繁体   English   中英

Socket.io连接不适用于多个片段

[英]Socket.io connection doesn't work for multiple fragments

我正在用socket.io创建一个项目。 只要只有一个片段,它就可以正常工作。 但是,随着我在主要活动中添加更多片段,它开始创建多个连接,我认为这不是一个好主意。

最初,我直接从片段连接到socket.io,但这是为每个片段创建一个连接。 因此,我在Application类中创建了一个连接,并将其用于片段中,从而立即解决了多个连接问题。 但是现在出现了一个新问题。

如果Internet断开连接并重新连接,则片段不会从Application类获得重新建立的连接。 我已经尝试了一个多星期,但没有解决方案。 奇怪的是,我在互联网和stackoverflow上进行搜索,但从未有人问过这样的问题。

这是应用程序类中的连接代码

synchronized public Socket getSocket() {
    if (mSocket == null) {
        try {
            IO.Options opts = new IO.Options();
            opts.reconnection = true;
            opts.reconnectionDelay = 1000;
            mSocket = IO.socket("http://ddbharti.in", opts);

            mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.d(TAG, "EVENT_CONNECT");
                }

            }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.d(TAG, "EVENT_DISCONNECT");
                }
            }).on(Socket.EVENT_ERROR, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    Log.d(TAG, "error");
                }
            });
            mSocket.connect();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    return mSocket;
}

这就是每个片段的连接方式

socket = application.getSocket();
socket.emit("tag", tag);

如果Internet正常运行,则此设置可以正常工作,加载时间为300毫秒。 但是,当我断开/重新连接Internet或保持Internet断开连接并启动应用程序,然后连接到Internet时。 Application类中的Connection可以快速连接,但是由于某种原因,当前片段中的连接无法获得连接。

如果我切换片段,则它将再次开始侦听来自Application类的连接。

那我在这里想念什么吗? 在重新连接的情况下,如果不重新加载整个片段,如何强制片段再次从应用程序类获得连接?

任何帮助是极大的赞赏。

因此,我创建了一个事件列表器,以监听套接字连接状态并相应地显示ui。 只需要一个与事件列表器的连接即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM