У меня есть проблема с тем, чтобы сохранить соединение сокетов в android.не может поддерживать соединение сокета, когда экран выключен в android
Я использую Socket.IO-client java-библиотеку в своем приложении.
Сокетное соединение сохраняется при включенном экране.
но, если экран выключен, разъём отключен, вызванный таймаутом пинга.
как я могу решить эту проблему?
Открой связь как этот.
private static final String EVENT_CONNECT = Socket.EVENT_CONNECT;
private static final String EVENT_MESSAGE = Socket.EVENT_MESSAGE;
private static final String EVENT_DISCONNECT = Socket.EVENT_DISCONNECT;
private static final String EVENT_PING = Socket.EVENT_PING;
private static final String EVENT_CONNECT_TIMEOUT = Socket.EVENT_CONNECT_TIMEOUT;
private static final String EVENT_ERROR = Socket.EVENT_ERROR;
public void connect() {
if (socket != null && socket.connected() == true) {
return;
}
IO.Options options = new IO.Options();
options.timeout = 60 * 1000;
options.reconnection = true;
Log.d(TAG, "try socket connect");
socket.on(EVENT_CONNECT, this::onConnected)
.on(EVENT_MESSAGE, this::onMessage)
.on(EVENT_DISCONNECT, this::onDisconnected)
.on(EVENT_PING, this::onPing)
.on(EVENT_CONNECT_TIMEOUT, this::onConnectTimeout)
.on(EVENT_ERROR, this::onError);
socket.connect();
}
И это мой серверный код
var Socket = require('socket.io');
var io = Socket(server, { 'pingInterval': 25 * 1000 });
var port = process.env.PORT || 3000;
io.on('connection', function(socket){
console.log('a user connected');
...
socket.on('disconnect', function(data){
(typeof socket.member != 'undefined') && disconnect(socket);
console.log(data);
});
});
интервал пинг 25 второй, и тайм-аут 60 второй.
когда экран андроида выключен, клиент не работает для EVENT_PING
. другое событие работает правильно.
и сервер отключен с журналом (тайм-аут пинга).
В какой версии Android вы наблюдали эту проблему? –
Lollipop (5.0) и Kitkat (4.4) –
Вы используете Android-сервис для этого? –