php - Laravel Echo con Pusher para múltiples usuarios

CorePress2024-01-25  9

Estoy creando una aplicación que permitirá a los usuarios aceptar solicitudes de reunión. Un usuario puede tener varios calendarios para diferentes ubicaciones que debe administrar. Además, en cualquier momento se pueden añadir nuevos calendarios asociados a un usuario.

No veo cómo un usuario podría suscribirse a un número arbitrario de canales. Parece que tienes que crear un oyente explícito del lado del cliente para cualquier canal y evento que quieras monitorear:

public function getListeners()
{
    return [
        "echo-private:calendars.{$this->calendarId}, CalendarEventCreated" => 'notifyNewCalendarEvent',
    ];
} 

Dado que hay varios tipos de eventos (por ejemplo, CalendarEventCreated, CalendarEventRejected, CalendarEventUpdated) por calendario y potencialmente docenas de calendarios por usuario, ¿cómo se puede estructurar esto para que no haya cientos de oyentes ejecutándose para cada usuario?



------------------------------------

Una solución es transmitir datos directamente en user_id, proporcionando la identificación del calendario y la información del evento. Pero esto solo funciona para el propietario del calendario, o tendrías que transmitirlo a todos los usuarios con derechos de visualización en el calendario por separado.

La otra solución es ceñirse a la descripción. ¿Es realmente un problema escuchar 100 eventos? Al final, solo tendrá una docena de canales abiertos que necesitan autenticación en el lado del servidor y solo 1 conexión websocket abierta. Una vez autenticado en un canal, recibirás mensajes de todos modos, ya sea que los estés escuchando o no.

El truco consiste en hacer que el código de tu interfaz sea lo más limpio y SECO posible. Personalmente uso Vue, Vuex y vuex-orm mucho, donde el orm refleja la estructura de datos que tengo en mi backend. Cuando se insertan datos en el formulario de interfaz, se ejecuta una devolución de llamada donde tengo mi lógica de webhook. Cuando se eliminan datos, se ejecuta una devolución de llamada donde dejo canales, etc.



------------------------------------

Puedes fusionar CalendarEventCreated, CalendarEventRejected, CalendarEventUpdated en CalendarEvent y luego proporcionar el tipo de evento con la carga útil. Básicamente se puede utilizar un canal por usuario o un canal por calendario; Estoy seguro de que la programación y la escucha son completamente diferentes, pero en general no hay más o menos eventos/oyentes (supongamos queAmbos enfoques funcionan igual de bien).

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare