我有一个node.js,监视器是Firebase上的一个队列,用于发送GCM推送通知.工作良好.
它还会更新firebase上的"在线"状态.onDisconnect(),因此可以轻松查看Node.js服务器是否在线并正在运行.
问题:一段时间后,即使听众仍然连接并且运行正常,它也会显示"已断开连接".
const NODESERVERONLINE="NodeSeverStatus";
var ref = new Firebase(FBURL+FBKEY_GCM_QUEUE);
ref.child("NODESERVERONLINE").set("Online");
ref.child("NODESERVERONLINE").onDisconnect().set("Offline!");
ref.on("child_added",function(snapshot, prevChild){
If (snapshot.key()!=NODESERVERONLINE) DO_GCM_PUSH(snapshot.val());
}, function(errorObject){
console.log("Error reading Firebase: " + errorObject.code);
});
Run Code Online (Sandbox Code Playgroud)
最初,侦听器正在运行,-NodeSeverStatus显示在线.
但是"一段时间后"(几个小时),侦听器仍然正常运行,并且正在处理队列,但NodeServerStatus现在显示为Offline.
我可以在侦听器本身内移动在线/离线代码,但这似乎只是一个丑陋的黑客攻击,如果在超时期限内没有新的队列帖子,可能会有相同的问题.
这里的最佳做法是什么?谢谢.
快速猜测是您的网络连接短暂中断.
如果您使用网络连接襟翼,服务器将检测断开连接并进行设置Offline!.
客户端将自动重新连接,但您永远不会Online再次设置.
所以你会想听,.info/connected并设置Online在那里.
var ref = new Firebase("https://yours.firebaseio.com");
ref.child("NODESERVERONLINE").onDisconnect().set("Offline!");
ref.child(".info/connected").on("value", function(snapshot) {
if (snapshot.val() === true) {
ref.child("NODESERVERONLINE").set("Online");
}
});
Run Code Online (Sandbox Code Playgroud)
请参阅https://www.firebase.com/docs/web/guide/offline-capabilities.html
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |