Определение присутствия и статуса в сети
Создавайте индикаторы статуса «в сети» и «не в сети» в реальном времени с помощью присутствия Realtime Database, обработчиков onDisconnect и специального узла .info/connected, надёжно отражая состояние подключения.
«Определение присутствия и статуса в сети» — бесплатный урок Firebase Auth & Realtime Database Apps на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Firebase Auth & Realtime Database Apps, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Firebase Auth & Realtime Database Apps содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
What Is Presence
Presence means knowing which users are currently online. Chat apps, collaborative tools, and games all rely on it to show 'active now' indicators.
Realtime Database has special features that make presence robust even when a client disconnects unexpectedly.
The Connection Challenge
The hard part is the ungraceful disconnect: a user closes their laptop or loses signal. The app never gets to set status to 'offline'. We need the server to do it for us.
The .info/connected Node
Firebase exposes a special read-only boolean at .info/connected that is true when the client has a live connection and false when it does not.
import { getDatabase, ref, onValue } from 'firebase/database';
const db = getDatabase();
onValue(ref(db, '.info/connected'), (snap) => {
console.log('Connected?', snap.val() === true);
});onDisconnect Basics
onDisconnect registers an action that the server performs when the client disconnects. It is the key to reliable presence.
import { onDisconnect, set } from 'firebase/database';
const statusRef = ref(db, 'status/' + uid);
onDisconnect(statusRef).set({ state: 'offline' });Order of Operations
The correct sequence is critical:
- Wait until
.info/connectedis true - Register the
onDisconnectaction first - Only then set status to online
This guarantees the offline handler is armed before you go online.
A Complete Presence Setup
Combining the pieces gives a reliable presence system.
onValue(ref(db, '.info/connected'), (snap) => {
if (snap.val() !== true) return;
onDisconnect(statusRef).set({ state: 'offline', at: Date.now() })
.then(() => set(statusRef, { state: 'online', at: Date.now() }));
});Server Timestamps
Use serverTimestamp() instead of the client clock so 'last seen' times are consistent across devices with skewed clocks.
import { serverTimestamp } from 'firebase/database';
set(statusRef, { state: 'online', lastChanged: serverTimestamp() });Multiple Devices
A user may be online on phone and laptop at once. Track presence per connection (a unique key per session) and treat the user as offline only when all connections drop.
import { push } from 'firebase/database';
const conRef = push(ref(db, 'status/' + uid + '/connections'));
onDisconnect(conRef).remove();Cancelling onDisconnect
If the user logs out cleanly, cancel the pending onDisconnect action and set offline yourself, so stale handlers do not fire later.
import { onDisconnect } from 'firebase/database';
await onDisconnect(statusRef).cancel();
await set(statusRef, { state: 'offline' });Displaying Presence
Other clients simply listen to the status node. A green dot appears when state is online and disappears when the server flips it to offline on disconnect.
onValue(ref(db, 'status/' + otherUid), (snap) => {
const online = snap.val()?.state === 'online';
toggleDot(online);
});Best Practices
Keep presence reliable and cheap:
- Store presence in a shallow, dedicated node
- Use server timestamps for last-seen
- Account for multiple connections
- Always register onDisconnect before going online
Quick Check
Test your understanding of presence.
Recap
You can now build reliable online indicators.
- Watch
.info/connectedfor live connection state - Use
onDisconnectso the server marks users offline - Register onDisconnect before going online
- Use server timestamps and per-connection tracking
- Cancel handlers on clean logout
Изучай Firebase Auth & Realtime Database Apps с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 11
- Уроки
- 44
Часто задаваемые вопросы
Урок «Определение присутствия и статуса в сети» бесплатный?
Да — полный текст урока «Определение присутствия и статуса в сети» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Firebase Auth & Realtime Database Apps, подпишись на CoddyKit PRO. Курс Firebase Auth & Realtime Database Apps содержит 4 уроков всего.
Чему я научусь в уроке «Определение присутствия и статуса в сети»?
Создавайте индикаторы статуса «в сети» и «не в сети» в реальном времени с помощью присутствия Realtime Database, обработчиков onDisconnect и специального узла .info/connected, надёжно отражая состоян… Ты практикуешь Firebase Auth & Realtime Database Apps с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Firebase Auth & Realtime Database Apps?
Предыдущий опыт не требуется. Firebase Auth & Realtime Database Apps на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Определение присутствия и статуса в сети»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Firebase Auth & Realtime Database Apps?
Да. Каждый урок Firebase Auth & Realtime Database Apps включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Включение автономного хранения
- Обработка разрывов сетевого соединения
- Стратегии синхронизации данных
- Определение присутствия и статуса в сети