İçeriğe geç

Özellikler

Realtime'ın zor kısmı, çoktan çalışıyor

Bir realtime özelliği, bir tutam ürün kodunun altında duran koca bir teslim mekanizmasıdır: kim abone, kimin izni var, kim hâlâ orada. PushCaster işte o ikinci kısımdır.

Channel'lar

Dört tür ve sözleşme, önekin kendisi

Bir kanal'ın adı nasıl davranacağını belirler. Önek kütüphaneye, sunucunuzdan yetki isteyip istemeyeceğini, bir üye listesi bekleyip beklemeyeceğini ve şifreleyip şifrelemeyeceğini söyler.

Channel türleri, kimin abone olabileceği, ne işe yaradıkları ve bir aboneliğin nasıl yetkilendirildiği
ÖnekKim abone olabilirNe işe yararYetki
publicApp key'i olan herkes.Derleme durumu, canlı skorlar, herkese açık akışlar.Yok
private-Sunucunuz abone bazında karar verir.Bir hesaba veya bir kaynağa sınırlanmış her şey.İmzalı
presence-Yetkili ve üye listesini taşır.Üyeliğin kendisinin özellik olduğu odalar ve oturumlar.İmzalı
private-encrypted-Yetkili; payload'ları istemcileriniz şifreler.Bize karşı da kapalı kalması gereken payload'lar.İmzalı

cache- kanal'ları canlı olay teslim eder ama saklanmış durumu yeniden oynatmaz — bkz. bilinen farklar.

Yetkilendirme

Yetki sunucunuzda kalır

private ve presence aboneliklerini biz vermeyiz. Uygulamanız verir ve yanıtını sizin app secret'inizle imzalar. Biz imzayı doğrularız, başka bir şey yapmayız.

  • Tek endpointPOST /pusher/auth istek ve yanıt biçimini korur.
  • Sizin kurallarınızBu socket'in bu kanal'a katılıp katılamayacağı, yalnızca sizin yanıtlayabileceğiniz bir sorudur.
  • presence kimliğiAynı çağrı member id'yi ve diğer üyelerin görmesi gereken her şeyi döndürür.
routes/pusher-auth.js
js
import Pusher from 'pusher'const pusher = new Pusher({  appId: process.env.PUSHCASTER_APP_ID,  key: process.env.PUSHCASTER_KEY,  secret: process.env.PUSHCASTER_SECRET,  host: 'api-eu1.pushcaster.io',  useTLS: true,})// Called by the client library whenever it subscribes to a// private-, presence- or private-encrypted- channel.app.post('/pusher/auth', (req, res) => {  const { socket_id, channel_name } = req.body  const user = req.session.user  if (!user || !mayJoin(user, channel_name)) {    return res.sendStatus(403)  }  res.send(    pusher.authorizeChannel(socket_id, channel_name, {      user_id: String(user.id),      user_info: { name: user.name },    }),  )})

Webhook'lar

Socket katmanının gördüğünü backend'iniz duyar

Doluluk ve üyelik yalnızca bağlantıda görünür. Webhook'lar bunları imzalı olarak geri gönderir — böylece ilk izleyici geldiğinde işe başlayıp sonuncusu ayrıldığında durabilirsiniz.

Webhook olay türleri ve her birinin ne zaman tetiklendiği
EventNe zaman tetiklenir
channel_occupiedİlk abone boş bir kanal'a katıldığında.
channel_vacatedSon abone ayrıldığında.
member_addedBiri bir presence kanal'ına katıldığında.
member_removedBiri bir presence kanal'ından ayrıldığında.
client_eventBir istemci doğrudan bir kanal'a olay gönderdiğinde.
cache_missBir cache kanal'ından, elinde olmayan bir durum istendiğinde.
routes/webhooks.js
js
app.post('/pushcaster/webhooks', (req, res) => {  const hook = pusher.webhook({ headers: req.headers, rawBody: req.rawBody })  // The signature is computed with your app secret, so an  // unsigned or mismatched delivery never reaches your logic.  if (!hook.isValid()) return res.sendStatus(401)  for (const event of hook.getEvents()) {    if (event.name === 'channel_occupied') startFeed(event.channel)    if (event.name === 'channel_vacated') stopFeed(event.channel)  }  res.sendStatus(200)})

Kütüphaneler

PushCaster SDK'si yok, bilerek

PushCaster telde Pusher Channels protokolünü konuşur; resmî kütüphaneler onunla değiştirilmeden çalışır. Eklenecek bir paketimiz yok ve sürüm çıkardığımızda bozulacak bir şeyimiz de yok.

  • pusher-js
  • Laravel Echo
  • pusher/pusher-php-server
  • pusher-http-node
  • Python
  • Go
  • Ruby
  • Java
  • Android
  • iOS
  • Flutter
  • Unity

Kurulum satırı, tam hâliyle: npm i pusher-js.

Altyapı

İki katman ve seçtiğiniz bir küme

Teslim, faturalandırma ve yapılandırmadan ayrı bir katmanda çalışır; bu yüzden bir control plane kesintisi teslimi kesmeden panoyu zayıflatır.

Şu anda çalışıyor

  • eu1Batı Avrupa
  • eu2Orta Avrupa

Cluster'lar mesajlaşma için yüksek erişilebilirliğe sahiptir, presence için değil: bir presence deposu kaybolursa presence ve doluluk zayıflar, public ve private kanal'lar teslim etmeye devam eder. Bunu burada okumak, sonradan keşfetmekten iyidir.

Bir publish'in yolculuğunu görün

Bir uygulama oluşturun ve bir istemci bağlayın.

Support