Solución:
Después de leer un poco en línea, la razón por la que mi servidor de socket determinará que mi aplicación nativa de reacción está ‘muerta’ es porque todo el código javascript dentro de mi aplicación ha dejado de funcionar cuando mi dispositivo está bloqueado o en segundo plano.
Por lo tanto, he encontrado una solución para resolver este problema.
Herramientas que he utilizado:
- React Native Appstate
- Reaccionar temporizador de fondo nativo
Mi código del lado del cliente:
import React, {useEffect, useRef} from 'react';
import {AppState} from 'react-native'
export default () => {
const appState = useRef(AppState.currentState);
var interval
const _handleAppStateChange = (nextAppState) => {
if (
appState.current.match(/inactive|background/) &&
nextAppState === "active"
) {
console.log("App has come to the foreground!");
//clearInterval when your app has come back to the foreground
BackgroundTimer.clearInterval(interval)
}else{
//app goes to background
console.log('app goes to background')
//tell the server that your app is still online when your app detect that it goes to background
interval = BackgroundTimer.setInterval(()=>{
console.log('connection status ', socket.connected)
socket.emit('online')
},5000)
appState.current = nextAppState;
console.log("AppState", appState.current);
}
useEffect (() => {
AppState.addEventListener("change", _handleAppStateChange);
return () => {
AppState.removeEventListener("change", _handleAppStateChange);
};
},[])
}
Mi código del lado del servidor:
io.on('connection',(socket)=>{
socket.on('online',()=>{
//do nothing
})
}
)
Esta solución funciona en mi aplicación. Ahora el enchufe no se desconectará hasta que cierre la aplicación o haga clic en el botón de desconexión.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)