Firebase网络连接丢失断开处理程序故障
我在尝试处理Firebase中的网络连接丢失重新连接时遇到问题 当重新建立连接时,它会正常工作,并再次将用户数据写入firebase,但随后会立即将其删除。据我所知,onDisconnect.remove()函数的启动似乎有问题 这是我的代码,也许有人可以发现问题,或者提出更好的方法来处理网络连接丢失:Firebase网络连接丢失断开处理程序故障,firebase,disconnect,reconnect,Firebase,Disconnect,Reconnect,我在尝试处理Firebase中的网络连接丢失重新连接时遇到问题 当重新建立连接时,它会正常工作,并再次将用户数据写入firebase,但随后会立即将其删除。据我所知,onDisconnect.remove()函数的启动似乎有问题 这是我的代码,也许有人可以发现问题,或者提出更好的方法来处理网络连接丢失: var userListRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/'); var meetin
var userListRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/');
var meetingId = $('#meetingIdInput').val();
var myUserId = $('#myIdInput').val();
var userName = $('#nameInput').val();
var avatar = $('#myImage').val();
var myUserRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/' + meetingId + '/users/' + myUserId);
var usersRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/' + meetingId + '/users');
var connectedRef = new Firebase("https://myrecovery.firebaseIO.com/.info/connected");
// CHECK FIREBASE PRESENSE
connectedRef.on("value", function(isOnline) {
if (isOnline.val() === true) {
console.log('Connected to Firebase');
// FIRE FUNCTION TO CONNECT TO THE MEETING
connectToMeeting();
} else {
console.log('Disconnected from Firebase');
// REMOVE USER FROM FIREBASE ON DISCONNECT
myUserRef.onDisconnect().remove();
}
});
// CONNECT TO THE MEETING
function connectToMeeting() {
// ADD USER TO FIREBASE MEETING->USER TABLE
myUserRef.set({userId: myUserId, userName: userName, avatar: avatar});
// CONNECT TO OPENTOK
session.connect(apiKey, token);
}
// ADD USER TO ATTENDEE SECTION ON CONNECTION
usersRef.on('child_added', function(snapshot) {
var user = snapshot.val();
displayConnectedUser(user.userId, user.avatar, user.userName);
});
function displayConnectedUser(userId, avatar, userName) {
$('#attendees').prepend('<div id="attendee_' + userId + '" class="attendee_box">' + avatar + '<br />' + userName + '</div>');
}
var userListRef=new Firebase('https://myrecovery.firebaseIO.com/tsmusers/');
var meetingId=$('#meetingIdInput').val();
var myUserId=$('#myIdInput').val();
var userName=$('#nameInput').val();
var avatar=$('#myImage').val();
var myUserRef=new Firebase('https://myrecovery.firebaseIO.com/tsmusers/“+meetingId+”/users/'+myUserId);
var usersRef=new Firebase('https://myrecovery.firebaseIO.com/tsmusers/“+meetingId+”/users”);
var connectedRef=新Firebase(“https://myrecovery.firebaseIO.com/.info/connected");
//检查FIREBASE是否存在
connectedRef.on(“值”,函数(isOnline){
if(isOnline.val()==true){
console.log(“连接到Firebase”);
//启动连接到会议的功能
连接到会议();
}否则{
console.log(“与Firebase断开连接”);
//在断开连接时从FIREBASE中删除用户
myUserRef.onDisconnect().remove();
}
});
//连接到会议
函数connectToMeeting(){
//将用户添加到FIREBASE会议->用户表
myUserRef.set({userId:myUserId,userName:userName,avatar:avatar});
//连接到OPENTOK
连接(apiKey、令牌);
}
//将用户添加到有关连接的与会者部分
usersRef.on('child_added',函数(快照){
var user=snapshot.val();
displayConnectedUser(user.userId、user.avatar、user.userName);
});
函数displayConnectedUser(用户ID、化身、用户名){
$(“#与会者”).prepend(“+avatar+”
“+userName+”);
}
联机时必须使用onDisconnect()。客户端脱机时无法与服务器通信,因此在下次联机之前,onDisconnect()操作不会发生。您可以将代码更改为:
connectedRef.on(“值”,函数(isOnline){
if(isOnline.val()==true){
console.log(“连接到Firebase”);
//启动连接到会议的功能
连接到会议();
//在断开连接时从FIREBASE中删除用户
myUserRef.onDisconnect().remove();
}
}
希望这能有所帮助!它确实有效,但在onDisconnect删除后,我不得不对代码进行更改以重新编写用户的数据,但效果很好。谢谢!