Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Kılavuzlar›Realtime and presence (SDK)

JavaScript SDK'sıyla canlı mesajlar ve iletişim durumu gönderin

Çalışan bir yığına karşı gözlemlenen her çağrının davranışıyla birlikte aura.realtime günlük akışları.

7 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu çeviriden bu yana İngilizce kaynak değişti. Bazı bilgiler güncelliğini kaybetmiş olabilir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Kanallar

1. Kanallar ve durumları

Kanal, adlandırılmış bir odadır. Aynı adı açan istemciler birbirlerinin mesajlarını alırlar. Abone olduğunuzda istemci kendi kendine bağlanır.

channel.tstypescript
const room = aura.realtime.channel('room-1')

room.subscribe((status) => {
  // 'ABONE OLDU' | 'CHANNEL_ERROR' | 'TIMED_OUT' | 'KAPALI'
  if (status === 'SUBSCRIBED') console.log('ready')
})

Yalnızca SUBSCRIBED tarihinden sonra gönderin. Bundan önce veya reddedildikten sonra send(), göndermek yerine not_connected veya requires_subscription gibi bir durumu döndürür. Kanalların kapsamı projenize göre belirlenir: iki proje birbirini görmeden aynı adı kullanabilir.

#
Yayın

2. Mesajları yayınlayın

broadcast.tstypescript
// Al
room.on('broadcast', { event: 'ping' }, (message) => {
  console.log(message.payload) // { etkinlik: 'ping', n: 1, metin: 'merhaba' }
})

// ABONE OLDUĞUNUZDA gönderin
const status = await room.send({ type: 'broadcast', event: 'ping', payload: { n: 1, text: 'hello' } })
// → 'tamam'

Gerçek bir çalışmada, oturum açan ikinci bir istemci mesajı iki saniyeden kısa bir sürede aldı.

Yük bir event anahtarı taşır

Aldığınız mesajda olay adı payload içine eklenir: { "event": "ping", "n": 1, … }. Kendi event anahtarına sahip bir payload reddedilir (channel.send 'invalid_payload' döndürür, httpBroadcast realtime_payload_event_reserved döndürür): anahtarı yeniden adlandırın, örneğin kind.

  • Varsayılan olarak kendi mesajlarınızı almazsınız. Bunları almak için { config: { broadcast: { self: true } } } ile kanalı açın.
  • Bir mesaj id, topic, timestamp, event ve payload taşır.
#
Mevcudiyet

3. Mevcudiyet

Varlık, seçtiğiniz bir durumla bir kanala kimin bağlı olduğunu gösterir.

presence.tstypescript
const lobby = aura.realtime.channel('lobby', { config: { presence: { key: user.id } } })

lobby.on('presence', { event: 'sync' }, () => {
  console.log(lobby.presenceState())
})
lobby.subscribe(async (status) => {
  if (status === 'SUBSCRIBED') await lobby.track({ name: 'Bob' })
})

presenceState() kullanıcı kimliğiyle anahtarlanır. Her giriş kullanıcının bağlantılarını listeler:

presenceState()json
{
  "d6ba3994-…": [
    { "client_id": "936cb015-…", "user_id": "d6ba3994-…", "metadata": { "name": "Bob" },
      "joined_at": "2026-10-12T19:32:19.093Z", "last_seen": "2026-10-12T19:32:19.096Z" }
  ]
}

untrack() sizi listeden çıkarır ve kanaldan ayrılmak veya sayfayı kapatmak sizin için bunu yapar.

#
Değişiklikler

4. Veritabanı değişiklikleri

Kendi veritabanı olan projeler

postgres_changes, kendi veritabanı olan projelerde çalışır. Önce her tabloyu etkinleştirin: PUT /v1/db/{project_id}/schema/tables/{table}/realtime, gövde olarak {"enabled": true} ve bir service_role anahtarıyla. Dinleme, ilk istemci abone olduğunda başlar ve sonuncusu ayrıldıktan birkaç dakika sonra durur. Teslimat en az bir kezdir: sunucu yeniden başladıktan sonra bir değişiklik iki kez gelebilir; bu yüzden işleyicinizi idempotent yapın, örneğin satırın birincil anahtarını temel alarak. Yoğun bir küme, yeni bir dinleyiciyi kapasite hatasıyla reddedebilir; kısa süre sonra yeniden deneyin. Kanalı tablonun adıyla adlandırın, db:public.<table>: değişiklikler bu kanalda yayımlanır. İlk abone, aboneliğinden hemen önce yapılan en fazla 5 saniyelik değişikliği alabilir. Değişiklikler kurtarma için bir saat saklanır, sonra silinir. Küme doluysa abonelik capacité d'écoute postgres_changes atteinte pour la base de ce projet, réessayez hatasıyla başarısız olur. Dinleme bir dakikadan uzun süre kayıp kalırsa kanal CHANNEL_ERROR durumuna geçer; dinleme geri geldiğinde yeniden abone olun. Bir saatlik saklama süresinden uzun süren bir kesinti, bu sırada yapılan değişiklikleri kaybeder.

changes.tstypescript
const changes = aura.realtime
  .channel('db:public.todos')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'todos' }, (payload) => {
    console.log(payload.eventType, payload.new)
  })
  .subscribe((status) => {
    if (status === 'CHANNEL_ERROR') console.warn('database changes are not available for this project')
  })
#
Temizleme

5. Temizleyin

cleanup.tstypescript
room.unsubscribe()                 // bir kanaldan ayrıl
aura.realtime.removeChannel(room)  // git ve unut gitsin
aura.realtime.removeAllChannels()  // her kanalı bırak
aura.realtime.disconnect()         // bağlantıyı kapat

aura.realtime.onStateChange(callback) ve onError(callback) ile bağlantıyı izleyin. Bir kesintiden sonra, siz setAutoReconnect(false) çağırmadığınız sürece istemci kendi kendine yeniden bağlanır.