title: 离线功能

本篇文档介绍离线功能的相关特性和具体实现。

离线功能让应用在无网环境下仍可以操作数据。它包括离线事件、监控连接状态等特性。

监听连接状态

/.info/connected 是 Wilddog Sync 提供的一个保留路径,用于存储客户端与云端的连接状态。

例如,监测客户端是否连接到云端:

  1. var config = {
  2. authDomain: "<appId>.wilddog.com",
  3. syncURL: "https://<appId>.wilddogio.com"
  4. };
  5. wilddog.initializeApp(config);
  6. var connectedRef = wilddog.sync().ref("/.info/connected");
  7. connectedRef.on("value", function(snap) {
  8. if (snap.val() === true) {
  9. alert("connected");
  10. } else {
  11. alert("not connected");
  12. }
  13. });

注意:

/.info/connected 的值是 boolean 类型。

离线事件

离线事件是云端与客户端断开连接时自动触发的事件。

断开连接包括客户端主动断开连接,或者意外的网络中断。触发事件即执行特定的数据操作,它支持离线写入,更新和删除数据方法。

onDisconnect() 方法用于在云端与客户端断开连接后执行数据操作。

例如,当用户的网络连接中断时,使用onDisconnect() 方法,记录这个用户已经离线:

  1. var config = {
  2. authDomain: "samplechat.wilddog.com",
  3. syncURL: "https://samplechat.wilddogio.com"
  4. };
  5. wilddog.initializeApp(config);
  6. var presenceRef = wilddog.sync().ref("disconnectmessage");
  7. // 当客户端连接断开时,写入一个字符串
  8. presenceRef.onDisconnect().set("I disconnected!");

通过回调方法判断离线事件是否被云端成功记录:

  1. presenceRef.onDisconnect().remove( function(err) {
  2. if(err) {
  3. console.error('could not establish onDisconnect event', err);
  4. }
  5. });

cancel() 方法用于取消离线事件:

  1. // 设置离线事件
  2. presenceRef.onDisconnect().set("I disconnected!");
  3. // 取消离线事件
  4. presenceRef.onDisconnect().cancel();

提示:

通过该 最佳实践,可以保证网络意外中断情况时,离线事件也能成功触发。

手动建立或断开连接

goOnline()goOffline() 方法用于手动建立连接和断开连接。

例如:

  1. var config = {
  2. authDomain: "samplechat.wilddog.com",
  3. syncURL: "https://samplechat.wilddogio.com"
  4. };
  5. wilddog.initializeApp(config);
  6. var connectedRef = wilddog.sync().ref("/.info/connected");
  7. // 监听连接状态
  8. connectedRef.on("value", function(snap) {
  9. if (snap.val() === true) {
  10. console.log("connected");
  11. } else {
  12. console.log("I disconnected");
  13. }
  14. });
  15. setTimeout(function(){
  16. // 断开连接
  17. wilddog.sync().goOffline();
  18. setTimeout(function(){
  19. // 重新建连
  20. wilddog.sync().goOnline();
  21. },3000);
  22. },3000);

注意:

一个应用可以创建多个 Wilddog Sync 实例,但多个实例只会复用同一个长连接。 并且goOffline()方法 和 goOnline()方法会控制全局的在线和离线。