0

我在尝试处理 Firebase 中的网络连接丢失重新连接时遇到问题。

当连接重新建立时,它会正常工作并将用户数据再次写回firebase,但随后它会立即再次将其删除。据我所知, onDisconnect.remove() 函数似乎无序触发。

这是我的代码,也许有人可以发现问题或提出更好的方法来处理网络连接丢失:

    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>');
    }
4

1 回答 1

0

在线时必须使用 onDisconnect()。客户端在离线时无法与服务器通信,因此 onDisconnect() 操作在您下次在线之前不会发生。您可以将代码更改为:

connectedRef.on("value", function(isOnline) {
  if (isOnline.val() === true) {
    console.log('Connected to Firebase');
    // FIRE FUNCTION TO CONNECT TO THE MEETING
    connectToMeeting();
    // REMOVE USER FROM FIREBASE ON DISCONNECT
    myUserRef.onDisconnect().remove();
  }
}

希望这可以帮助!

于 2013-08-30T20:15:25.773 回答