Zum Inhalt springen

Funktionen

Der schwere Teil von Realtime, schon im Betrieb

Eine Realtime-Funktion ist wenig Produktcode auf viel Zustellmaschinerie: wer abonniert hat, wer darf, wer noch da ist. PushCaster ist dieser zweite Teil.

Channels

Vier Arten, und das Präfix ist der Vertrag

Der Name eines channel entscheidet über sein Verhalten. Das Präfix sagt der Bibliothek, ob sie Ihren Server um Autorisierung bitten soll, ob sie eine Mitgliederliste erwarten soll, und ob sie verschlüsseln soll.

Channel-Arten, wer abonnieren darf, wofür sie da sind, und wie ein Abonnement autorisiert wird
PräfixWer abonnieren darfWofür es da istAuth
publicAlle, die den app key haben.Build-Status, Live-Ergebnisse, öffentliche Feeds.Keine
private-Ihr Server entscheidet, je Abonnent.Alles, was auf ein Konto oder eine Ressource begrenzt ist.Signiert
presence-Autorisiert, und bringt die Mitgliederliste mit.Räume und Sitzungen, wo die Mitgliedschaft die Funktion ist.Signiert
private-encrypted-Autorisiert; payloads werden von Ihren Clients verschlüsselt.Payloads, die auch für uns undurchsichtig bleiben sollen.Signiert

cache- channels stellen Live-events zu, spielen aber keinen gespeicherten Zustand nach — siehe bekannte Unterschiede.

Autorisierung

Ihr Server bleibt die Instanz

Wir erteilen private- und presence-Abonnements nicht. Das tut Ihre Anwendung, und sie signiert ihre Antwort mit Ihrem app secret. Wir prüfen die Signatur, und sonst nichts.

  • Ein endpointPOST /pusher/auth behält Form von Anfrage und Antwort.
  • Ihre RegelnOb dieser socket diesem channel beitreten darf, ist eine Frage, die nur Sie beantworten können.
  • Identität in presenceDerselbe Aufruf liefert die member id und alles, was andere Mitglieder sehen sollen.
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 },    }),  )})

Webhooks

Was die Socket-Ebene sieht, hört Ihr Backend

Belegung und Mitgliedschaft sind nur an der Verbindung sichtbar. Webhooks melden sie signiert zurück — damit Sie loslegen können, wenn die erste Zuschauerin kommt, und aufhören, wenn die letzte geht.

Webhook-event-Arten und wann sie jeweils auslösen
EventLöst aus, wenn
channel_occupiedDer erste Abonnent einem leeren channel beigetreten ist.
channel_vacatedDer letzte Abonnent gegangen ist.
member_addedJemand einem Presence-channel beigetreten ist.
member_removedJemand einen Presence-channel verlassen hat.
client_eventEin Client ein Event direkt an einen Channel geschickt hat.
cache_missEin cache-channel nach einem Zustand gefragt wurde, den er nicht hatte.
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)})

Bibliotheken

Es gibt kein PushCaster-SDK, mit Absicht

PushCaster spricht auf der Leitung das Pusher-Channels-Protokoll, die offiziellen Bibliotheken arbeiten damit also unverändert. Kein Paket von uns zum Hinzufügen, und nichts von uns, das bricht, wenn wir ausliefern.

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

Installationszeile, vollständig: npm i pusher-js.

Infrastruktur

Zwei Ebenen, und ein Cluster, den Sie wählen

Die Zustellung läuft auf einer Ebene getrennt von Abrechnung und Konfiguration; ein Ausfall der control plane beeinträchtigt also das Dashboard, ohne die Zustellung zu unterbrechen.

Läuft gerade

  • eu1Europa West
  • eu2Europa Mitte

Cluster sind hochverfügbar für die Zustellung und nicht für presence: geht ein Presence-Speicher verloren, verschlechtern sich presence und Belegung, während public- und private-channels weiter zustellen. Besser hier gelesen als später entdeckt.

Sehen Sie den Weg eines publish

Legen Sie eine Anwendung an und verbinden Sie einen Client.

Support