我正在用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类的连接。
那么我在这里想念什么吗?在重新连接的情况下,如何在不重新加载整个片段的情况下强制片段再次从应用程序类获得连接?
非常感谢您的帮助。
答案 0 :(得分:0)
因此,我创建了一个事件列表器,以监听套接字连接状态并相应地显示ui。只需一个与事件列表器的连接即可。