Lewati ke konten

Fitur

Bagian sulit dari realtime, sudah berjalan

Sebuah fitur realtime adalah sedikit kode produk di atas banyak sekali mesin pengiriman: siapa yang subscribe, siapa yang boleh, siapa yang masih di sana. PushCaster adalah bagian kedua itu.

Channel

Empat jenis, dan awalannya adalah kontraknya

Nama sebuah channel menentukan perilakunya. Awalannya memberi tahu pustaka apakah harus meminta otorisasi ke server Anda, apakah harus menunggu daftar anggota, dan apakah harus mengenkripsi.

Jenis channel, siapa yang boleh subscribe, untuk apa, dan bagaimana sebuah langganan diotorisasi
AwalanSiapa yang boleh subscribeUntuk apaOtorisasi
publicSiapa pun yang punya app key.Status build, skor langsung, umpan publik.Tidak ada
private-Server Anda yang memutuskan, per subscriber.Apa pun yang dibatasi pada satu akun atau satu sumber daya.Bertanda tangan
presence-Diotorisasi, dan membawa daftar anggota.Ruang dan sesi, tempat keanggotaan itu sendiri adalah fiturnya.Bertanda tangan
private-encrypted-Diotorisasi; payload dienkripsi oleh client Anda.Payload yang harus tetap tidak terbaca oleh kami juga.Bertanda tangan

cache- channel mengirim event langsung tetapi tidak memutar ulang keadaan tersimpan — lihat perbedaan yang diketahui.

Otorisasi

Server Anda tetap pemegang keputusan

Kami tidak memberikan langganan private dan presence. Aplikasi Andalah yang memberikannya, dan menandatangani jawabannya dengan app secret Anda. Kami memverifikasi tanda tangannya, tidak lebih.

  • Satu endpointPOST /pusher/auth mempertahankan bentuk permintaan dan jawabannya.
  • Aturan AndaApakah socket ini boleh bergabung ke channel ini adalah pertanyaan yang hanya bisa Anda jawab.
  • Identitas di presencePanggilan yang sama mengembalikan member id dan apa pun yang seharusnya dilihat anggota lain.
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

Apa yang dilihat lapisan socket, didengar backend Anda

Okupansi dan keanggotaan hanya terlihat di koneksi. Webhook mengirimkannya balik, bertanda tangan — supaya Anda bisa mulai bekerja saat penonton pertama datang dan berhenti saat yang terakhir pergi.

Jenis event webhook dan kapan masing-masing terpicu
EventTerpicu ketika
channel_occupiedSubscriber pertama bergabung ke channel yang kosong.
channel_vacatedSubscriber terakhir keluar.
member_addedSeseorang bergabung ke channel presence.
member_removedSeseorang keluar dari channel presence.
client_eventSebuah client mengirim event langsung ke sebuah channel.
cache_missSebuah channel cache dimintai keadaan yang tidak dipegangnya.
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)})

Pustaka

Tidak ada SDK PushCaster, memang disengaja

PushCaster berbicara protokol Pusher Channels di kabel, jadi pustaka resmi bekerja dengannya tanpa modifikasi. Tak ada paket kami yang perlu ditambahkan, dan tak ada milik kami yang rusak saat kami merilis.

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

Baris pemasangan, selengkapnya: npm i pusher-js.

Infrastruktur

Dua lapisan, dan satu cluster yang Anda pilih

Pengiriman berjalan di lapisan yang terpisah dari penagihan dan konfigurasi, jadi gangguan control plane menurunkan kualitas dasbor tanpa memutus pengiriman.

Sedang berjalan

  • eu1Eropa Barat
  • eu2Eropa Tengah

Cluster tersedia tinggi untuk pengiriman pesan dan tidak untuk presence: jika penyimpanan presence hilang, presence dan okupansi menurun sementara channel public dan private tetap mengirim. Lebih baik dibaca di sini daripada ditemukan belakangan.

Lihat perjalanan sebuah publish

Buat sebuah aplikasi dan hubungkan satu client.

Support