firebase 문서 다음에 존재하는 응용 프로그램을 빌드하면 응용 프로그램이 여전히 연결되어있을 때 연결 해제가 실행되는 시나리오가 있습니까? 네트워크 연결이 끊어지지 않을 때 프리젠 스 노드가 응용 프로그램이 오프라인 상태로 표시되고 몇 초 안에 다시 온라인 상태로 표시되는 경우를 볼 수 있습니다.Firebase onDisconnect() 여러 번 실행
현재 상태가 false로 설정되어있는 필드에 설치된 여러 임베디드 장치가 표시되고 거의 즉시 다시 true로 돌아와서 몇 초 내에 모든 장치에서 발생합니다. 우리가 수행 한 테스트와 온라인 문서에서 서버의 인터넷 연결이 끊어지면 약 60 초가 걸리므로 서버의 시간 초과가 onDisconnect() 메소드를 실행합니다.
이후 응용 프로그램이 실제로 실행 중일 때 장치가 존재 노드를 거짓으로 설정하면 장치를 허용하는 코드를 추가하여 현재 상태를 다시 true로 재설정합니다. 이 상황이 발생하면 우리는 하나의 진실을 되돌려 보내고 그 끝입니다. 다른 시간은 서버와 클라이언트가 서로 싸우고 있고 노드가 50-200의 과정에서 참으로 여러 번 리셋됩니다. 밀리 초. 우리는 현재 상태를 다시 true로 설정할 때마다 장치 GUID 내의 다른 노드로 푸시하여이를 모니터링합니다. 이는 모듈이 실행 중이고 처음에 존재를 확인한 후에 만 발생합니다.
다음은 장치에서 실행되는 다양한 모듈에서 호출하여 주어진 시간에 각 모듈의 상태를 모니터링 할 수있는 방법입니다.
exports.online = function (program, currentProgram) {
var programPath = process.env.FIREBASE_DEVICES + process.env.GUID + '/status/' + program
var onlinePath = process.env.FIREBASE_DEVICES + process.env.GUID + '/statusOnlineTimes/' + program
var programRef = new firebase(programPath);
var statusRef = new firebase(process.env.FIREBASE_DEVICES + process.env.GUID + '/status/bootup');
var onlineRef = new firebase(onlinePath)
amOnline.on('value', function(snapshot) {
if (snapshot.val()) {
programRef.onDisconnect().set(false);
programRef.set(true);
programRef.on('value', function(snapshot){
if (snapshot.val() == false){
programRef.set(true);
console.log('[NOTICE] Resetting', program, 'module status back to True after Fireabase set to False')
var objectToPush = {
program: program,
time: new Date().toJSON()
}
onlineRef.push(objectToPush)
}
})
if (currentProgram != undefined) {
statusRef.onDisconnect().set('Offline')
statusRef.set(currentProgram)
}
}
});
우리가 가진 문제는 중포 기지 그것이 정말 그 지위를 상실되지 않은 경우에도 방법 OnDisconnect의()를 호출하는 경우는 적있다? 리셋 코드를 추가하기 전에 기기가 오프라인 상태로 전환 된 후 60 초 이내에 다시 온라인 상태가되는 경우가있었습니다. 리셋 코드는 우리가 현장에서 가지고 있던 또 다른 문제에 대처하는 것이 었습니다. 전원이 장치에 중단되어 깨끗한 종료를하지 못하면 장치가 재부팅되어 이전 UID에 대한 시간 초과 전에 새로운 UID로 현재 상태를 재설정 할 수있었습니다 인스턴스가 해고됐다. 그런 다음 제한 시간이 지나면 실제로 온라인 상태 였지만 기기는 오프라인으로 표시됩니다.