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ı.
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.
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.
2. Mesajları yayınlayın
Gerçek bir çalışmada, oturum açan ikinci bir istemci mesajı iki saniyeden kısa bir sürede aldı.
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,eventvepayloadtaşır.
3. Mevcudiyet
Varlık, seçtiğiniz bir durumla bir kanala kimin bağlı olduğunu gösterir.
presenceState() kullanıcı kimliğiyle anahtarlanır. Her giriş kullanıcının bağlantılarını listeler:
untrack() sizi listeden çıkarır ve kanaldan ayrılmak veya sayfayı kapatmak sizin için bunu yapar.
4. Veritabanı değişiklikleri
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.
5. Temizleyin
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.