首页 > 解决方案 > Socket.io 连接不适用于多个片段

问题描述

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

起初我直接从片段连接到 socket.io,但那是为每个片段创建一个连接。所以我在 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);

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

如果我切换片段,那么它会再次开始监听来自 Application 类的连接。

那么我在这里错过了什么吗?如果重新连接而不重新加载整个片段,我如何强制片段再次从应用程序类获取连接?

任何帮助是极大的赞赏。

标签: javaandroidsocket.io

解决方案


所以我创建了一个事件监听器来监听套接字连接状态并相应地显示用户界面。只需要一个与事件监听器的连接就足够了。


推荐阅读