gpt4 book ai didi

react-native - 如何在 React Native 的后台保持套接字连接处于事件状态?

转载 作者:行者123 更新时间:2023-12-03 19:18:25 33 4
gpt4 key购买 nike

我使用 Wix 导航 v2、socket.io-client、react-native-background-time 和 react-native v59.10
首先我在 index.js 中注册了一个 HeadlessTask

if (Platform.OS === 'android') {
AppRegistry.registerHeadlessTask(
'backgroundTask',
() => backgroundTask
);
}

然后在 backgroundTask.js
import BackgroundTimer from 'react-native-background-timer';
import io from 'socket.io-client';

import { showLocalPushNotification } from 'helper/PushNotificationServices';

const URL = 'http://SOME_SECURE_URL'; //:)
const currentTimestamp = () => {
const d = new Date();
const z = n => (n.toString().length == 1 ? `0${n}` : n); // Zero pad
return `${d.getFullYear()}-${z(d.getMonth() + 1)}-${z(d.getDate())} ${z(
d.getHours()
)}:${z(d.getMinutes())}`;
};
let socket = io(URL, {
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
reconnectionAttempts: Infinity,
autoConnect: true
});
socket.on('connect', () => {
showLocalPushNotification('Socket Say', `socket connect successfully`);
});

socket.on('disconnect', reason => {
console.log(reason);
socket.connect();

if (reason === 'io server disconnect') {
// the disconnection was initiated by the server, you need to reconnect manually
}
console.log('disconnect');
showLocalPushNotification('Socket Say', `socket disconnect :(`);
});

socket = socket.on('receive', async data => {
console.log('receive');
showLocalPushNotification(
'Socket Say',
`${currentTimestamp()}`
);
console.log(data);
});

socket.on('reconnect', attemptNumber => {
console.log('reconnect');

console.log(attemptNumber);
// ...
});
socket.on('reconnect_error', error => {
console.log('reconnect_error');

console.log(error);
// ...
});

socket.on('reconnect_failed', () => {
console.log('reconnect_failed');
// ...
});

BackgroundTimer.runBackgroundTimer(() => {
showLocalPushNotification(
'BackgroundTimer Say',
`${value || ''}\n${currentTimestamp()}`
);
socket.emit('send', { my: 'ok i get news' });

// this.socket.emit('send', { my: 'ok i get news' });
}, 1000 * 15 * 60);

在真实设备中,当应用程序进入后台时,套接字会在一段时间后断开,我无法重新连接,如何保持连接活跃?

最佳答案

我长期面临同样的问题,但我解决了调用 socket.connect()当我在后台发送应用程序时
AppState.addEventListener("change", this._handleAppStateChange.bind(this))

_handleAppStateChange(state) {
if (state == "background") {
socket.connect();
}
}

关于react-native - 如何在 React Native 的后台保持套接字连接处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59983334/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com