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.
| Awalan | Siapa yang boleh subscribe | Untuk apa | Otorisasi |
|---|---|---|---|
| public | Siapa 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.
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.
| Event | Terpicu ketika |
|---|---|
| channel_occupied | Subscriber pertama bergabung ke channel yang kosong. |
| channel_vacated | Subscriber terakhir keluar. |
| member_added | Seseorang bergabung ke channel presence. |
| member_removed | Seseorang keluar dari channel presence. |
| client_event | Sebuah client mengirim event langsung ke sebuah channel. |
| cache_miss | Sebuah channel cache dimintai keadaan yang tidak dipegangnya. |
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