2012-07-05 30 views
44

Có chiến lược nào sẽ hoạt động trong đề xuất Firebase hiện tại để phát hiện xem kết nối máy chủ có bị mất và/hoặc lấy lại không?Phát hiện xem kết nối Firebase có bị mất/lấy lại

Tôi đang cân nhắc một số dự phòng ngoại tuyến cho thiết bị di động và tôi muốn có phương tiện đáng tin cậy để xác định thời điểm lớp dữ liệu Firebase có sẵn.

Trả lời

64

Đây là tính năng thường được yêu cầu và chúng tôi vừa phát hành bản cập nhật API để cho phép bạn thực hiện việc này!

var firebaseRef = new Firebase('http://INSTANCE.firebaseio.com'); 
firebaseRef.child('.info/connected').on('value', function(connectedSnap) { 
    if (connectedSnap.val() === true) { 
    /* we're connected! */ 
    } else { 
    /* we're disconnected! */ 
    } 
}); 

Tài liệu đầy đủ có sẵn tại https://firebase.google.com/docs/database/web/offline-capabilities.

+2

Michael, cảm ơn rất nhiều. Đội của bạn luôn có vẻ là một bước tiến. – Kato

+1

Một vấn đề khác là khi bạn thực sự muốn kết nối ở lại, nhưng máy chủ của bạn đi xuống ... và thay vì cố gắng yêu cầu kết nối mới, nó chỉ liên tục cố gắng kết nối lại với máy chủ 'xuống'. :( –

+0

Trường hợp tại điểm: http://screencast.com/t/ByFTXdJP6c –

11

Đã cập nhật: Đối với nhiều tính năng liên quan đến sự hiện diện, hữu ích khi khách hàng biết khi nào trực tuyến hoặc ngoại tuyến. Khách hàng cơ sở dữ liệu thời gian thực Firebase cung cấp một vị trí đặc biệt tại /.info/connected được cập nhật mỗi khi trạng thái kết nối của máy khách thay đổi. Dưới đây là ví dụ:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
connectedRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    boolean connected = snapshot.getValue(Boolean.class); 
    if (connected) { 
     System.out.println("connected"); 
    } else { 
     System.out.println("not connected"); 
    } 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
    System.err.println("Listener was cancelled"); 
    } 
}); 
+0

Xin chào, tôi đã cố gắng thêm Firebase vào dự án của mình và tôi luôn nhận được "không được kết nối". Bất cứ ý tưởng những gì có thể là sai? –

+0

Tương tự ở đây. Bất kỳ đề xuất ? –

+0

Đây là nền tảng Android –

3

Tôi đoán điều này đã thay đổi trong vài tháng qua. Hiện nay các hướng dẫn đang ở đây: https://firebase.google.com/docs/database/web/offline-capabilities

Trong tổng:

var presenceRef = firebase.database().ref("disconnectmessage"); 
// Write a string when this client loses connection 
presenceRef.onDisconnect().set("I disconnected!"); 

và:

var connectedRef = firebase.database().ref(".info/connected"); 
connectedRef.on("value", function(snap) { 
    if (snap.val() === true) { 
    alert("connected"); 
    } else { 
    alert("not connected"); 
    } 
}); 

tôi thừa nhận tôi không biết nhiều về cách tài liệu tham khảo được thiết lập, hoặc những gì điều đó có nghĩa là (bạn tạo chúng ra khỏi không khí mỏng hay bạn phải tạo ra chúng trước đó?) hoặc cái nào sẽ kích hoạt thứ gì đó trên máy chủ thay vì cái gì đó ở mặt trước, nhưng nếu liên kết vẫn còn hiện tại khi bạn đọc cái này, đọc ít hơn có thể giúp ích.

+0

Firebase là kho lưu trữ dữ liệu JSON NoSQL, vì vậy nó không có lược đồ. Vì vậy, bạn có thể chọn chúng ra khỏi không khí mỏng, thiết lập một giá trị, và sau đó chúng tồn tại:) – Kato

+0

Thành thật mà nói ... nó đã cho tôi một thời gian để quấn đầu của tôi xung quanh NoSQL sau 8 năm của SQL chỉ ... nhưng nó thực sự tuyệt vời. – Eduard

1

Đối với android bạn có thể làm cho người sử dụng ẩn bằng cách chỉ là một chức năng duy nhất được gọi là onDisconnect()

Tôi đã làm điều này trong một trong những ứng dụng trò chuyện của tôi mà người dùng cần để có được ẩn tự động nếu kết nối mạng bị mất ngừơi tiêu dùng bị ngắt kết nối từ Internet

DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("USERS/24/online_status"); 

presenceRef.onDisconnect().setValue(0); 

On ngắt kết nối từ mạng ở đây tôi đang làm cho online_status 0 của người dùng có Id là 24 trong căn cứ hỏa lực.

getReference("USERS/24/online_status") là đường dẫn đến giá trị bạn cần cập nhật ngoại tuyến/trực tuyến.

Bạn có thể đọc về nó trong offline capabilities

Lưu ý rằng căn cứ hỏa lực cần có thời gian khoảng 2-10 phút để thực hiện onDisconnect() chức năng.

Các vấn đề liên quan