2016-04-08 2 views
0

В разделе автономных возможностей для Web описано here, как определить, подключен ли клиент к Интернету или нет. Однако Firebase, похоже, не вызывает обработчик событий каждый раз, когда клиент подключается или отключается при работе в среде Node. Он работает как ожидается при запуске в браузере, то есть он вызывает обработчик событий каждый раз, когда клиент подключается или отключается от Интернета.Обнаружение состояния соединения не работает должным образом в среде Node

Отъезд jsFiddle. Как только вы запустите скрипку, и вы подключитесь или отключитесь от Интернета, вы увидите соответствующее сообщение «подключено» или «отключено» в консоли.

Я запустил приведенный ниже код в узле, который точно такой же, как и код, который я запускал в браузере. Во время работы в среде узла, я заметил, что я получил начальное «подключенный» и «отключено» сообщение, но если я снова подключен и отключен от Интернета, никаких сообщений не выводятся значения, что обработчик событий не называется

var Firebase = require('firebase'); 
var ref = new Firebase("<FIREBASE-APP>"); 

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

ответ

1

Я просто побежал один и тот же сценарий в узле на моей системе:

$ node connected.js 

не подключен

подключен

не подключен

подключен

Первые два пришли от первоначального запуска сценария. Последние две строки журнала появились после того, как я отключил Wi-Fi моего ноутбука на минуту, а затем снова.

Возможно, потребуется некоторое время, прежде чем клиент Firebase обнаружит, что он потерял соединение с его серверами, поэтому будьте терпеливы. Причина того, что это время зависит от среды (браузера/узла), в которой вы запускаете, поскольку клиент Firebase зависит от этой среды, чтобы предоставить WebSocket и определить тайм-ауты.

+0

Спасибо за быстрый ответ. Наверное, я был немного нетерпелив. Я снова запустил сценарий и в своей книге mac, в среднем потребовалось ~ 200 секунд, чтобы обнаружить, что соединение было потеряно. Когда я подключаюсь к Интернету, он обнаруживает, что через пару секунд это хорошо. Однако в браузере оба события обнаруживаются почти мгновенно. Любая причина, по которой была бы такая большая разница, чтобы обнаружить, что соединение было потеряно в среде узлов и браузерах? На моей машине для Windows потребовалось ~ 50 секунд, чтобы обнаружить, что соединение потеряно, что не так плохо, как 200 секунд. –

+0

Мой компьютер Macbook прошел ровно минуту. Это действительно зависит от ОС и среды, в которой работает ваш код. Я добавил дополнительную информацию об этом. –

+0

Хорошо. Имеет смысл. Благодаря! –

Смежные вопросы