【发布时间】:2019-09-13 03:32:06
【问题描述】:
我正在使用 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 类的连接。
所以我在这里错过了什么吗?如果重新连接而不重新加载整个片段,我如何强制片段再次从应用程序类获取连接?
非常感谢任何帮助。
【问题讨论】:
-
为什么要把socket管理放在Application类中呢?另外,为什么片段必须调用 getSocket 方法?如果您编写一个具有单个套接字的管理器类并编写读取等方法会更好,相信会更好。
-
对不起,我的错。我创建了一个事件监听器,它不断将连接状态告诉片段,现在一切正常。谢谢。
-
你能展示一个带有套接字连接的Manager类的例子吗?
-
是的,我可以,但你在回答中说你已经解决了这个问题。
-
我想我已经解决了,但我总是乐于接受建议。 :)