Saltar al contenido

Funciones

La parte difícil del realtime, ya en marcha

Una función realtime es un poco de código de producto sobre mucha maquinaria de entrega: quién está suscrito, quién tiene permiso, quién sigue ahí. PushCaster es esa segunda parte.

Channels

Cuatro tipos, y el prefijo es el contrato

El nombre de un channel decide cómo se comporta. El prefijo le dice a la librería si debe pedir autorización a su servidor, si debe esperar una lista de miembros y si debe cifrar.

Tipos de channel, quién puede suscribirse, para qué sirven y cómo se autoriza una suscripción
PrefijoQuién puede suscribirsePara qué sirveAutorización
publicCualquiera que tenga la app key.Estado de compilaciones, marcadores en vivo, feeds públicos.Ninguna
private-Su servidor decide, suscriptor a suscriptor.Cualquier cosa acotada a una cuenta o a un recurso.Firmada
presence-Autorizado, y trae la lista de miembros.Salas y sesiones, donde la pertenencia es la función.Firmada
private-encrypted-Autorizado; los payloads los cifran sus clientes.Payloads que también deben quedar opacos para nosotros.Firmada

cache- los channels entregan events en vivo pero no reproducen estado guardado — vea diferencias conocidas.

Autorización

Su servidor sigue siendo la autoridad

Nosotros no concedemos las suscripciones private ni presence. Las concede su aplicación, y firma su respuesta con su app secret. Nosotros verificamos la firma y nada más.

  • Un endpointPOST /pusher/auth conserva la forma de su petición y de su respuesta.
  • Sus reglasSi este socket puede entrar en este channel es una pregunta que solo puede responder usted.
  • Identidad en presenceLa misma llamada devuelve el member id y lo que los demás miembros deban ver.
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

Lo que ve la capa de sockets, lo oye su backend

La ocupación y la pertenencia solo son visibles en la conexión. Los webhooks se las devuelven, firmadas, para que empiece a trabajar cuando llega el primer espectador y pare cuando se va el último.

Tipos de event de webhook y cuándo se dispara cada uno
EventSe dispara cuando
channel_occupiedEl primer suscriptor entró en un channel vacío.
channel_vacatedSe fue el último suscriptor.
member_addedAlguien entró en un channel presence.
member_removedAlguien salió de un channel presence.
client_eventUn cliente envió un event directamente a un channel.
cache_missSe pidió a un channel cache un estado que no tenía.
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)})

Librerías

No hay SDK de PushCaster, a propósito

PushCaster habla el protocolo Pusher Channels en el cable, así que las librerías oficiales funcionan con él sin modificar. Ningún paquete nuestro que añadir y nada nuestro que se rompa cuando publicamos.

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

Línea de instalación, completa: npm i pusher-js.

Infraestructura

Dos capas, y un cluster que usted elige

La entrega corre en una capa separada de la facturación y la configuración, así que una caída del control plane degrada el panel sin interrumpir la entrega.

En marcha ahora

  • eu1Europa Oeste
  • eu2Europa Central

Los clusters son de alta disponibilidad para la mensajería y no para presence: si se pierde un almacén de presence, presence y la ocupación se degradan mientras los channels public y private siguen entregando. Mejor leerlo aquí que descubrirlo después.

Vea el recorrido de un publish

Cree una aplicación y conecte un cliente.

Support