Ahora, si tienes miedo de la palabra "websockets", no seas. Estableceré las instrucciones sobre cómo puede usarlo y estaré cerca para responder a sus preguntas si necesita.
Tuve este desafío en el que lo necesitaba para mostrar una lista de personas que actualmente están viendo una URL específica en Laravado. Entonces comencé a pensar. Parte de mí quería hacer un truco rápido (por suerte ese no es el lado más fuerte de la mía). Mientras que el otro quería construir algo genial, reutilizable y duradero.
"¿Por qué no usas Pusher??"
Aquí está la cosa.
Laravel viene con empuje habilitado. Aunque Pusher parece una solución rápida de "plug and play" (que es), viene con limitaciones. Echa un vistazo a https: // empujador.com/precios
Y la mayoría de los tutoriales te engañan con su título de implementación de WebSockets cuando en realidad solo quieren darte empujador. (Y mi parte favorita es cuando dicen que puedes cambiar fácilmente a enchufe.io)
"Queremos tener un número ilimitado de conexiones"
No queremos preocuparnos por las limitaciones.
Empecemos.
Estoy usando Vagrant / Homestead.
Para esto, tendremos que leer sobre la transmisión de eventos.
Cosas a tener en cuenta aquí (así que no tengo que repetir cosas):
1. Debería la interfaz de la transmisión para eventos
2. Habilitar rutas de transmisión y usar rutas/canales.PHP para autenticar a los usuarios
3. Canal público: todos pueden escuchar
4. Canal privado: debe autorizar a los usuarios antes de que puedan unirse a un canal
5. Canal de presencia: como privado, pero puede pasar muchos metadatos adicionales en ese canal y obtener una lista de personas que se han unido al canal.Método de evento de Broadcaston ()
Crea tu evento
PHP Artisan Make: Event MessagePushedIncluso puede seguir el ejemplo específico en la documentación de transmisión del evento. (Que realmente deberíamos).
Instalar redis
Antes de esto, en realidad tenía colas configurado con Supervisor/Redis/Horizon. Horizon es excelente y puedes encontrar información sobre eso aquí https: // laravel.com/docs/5.6/horizonte
Una vez que tenga sus colas funcionando, ese evento MessagePushed deberá usar colas.
Nota: Para que todo esto funcione, asegúrese de editar su .archivo env:
Broadcast_driver = RedisInstale el servidor de eco de Laravel
Entonces, esta parte es en realidad donde instalamos socket.Servidor IO que está incluido dentro de Laravel-Echo-Merver. Puedes encontrarlo aquí: https: // github.com/tlaverdure/laravel-eco-server
Nota: Verifique los requisitos en la parte superior!
Ejecute lo siguiente (como se indica en el documento)
NPM instalación -g laravel-eco-server
Y luego ejecute el init para obtener su servidor de eco de Laravel.Archivo JSON generado en la aplicación Root (que necesitaremos configurar).
Laravel-eco-server init
Una vez que haya generado su servidor Laravel-Echo.archivo json, debería verse así.
NOTA: Si desea empujar esto a su servidor público, asegúrese de agregar laravel-eco-servir.json a tu .gitignore. Genere este archivo en el servidor, de lo contrario deberá cambiar su authhost todo el tiempo.
Ejecute su servidor Laravel Echo
Tienes que ejecutarlo para iniciar WebSockets.
comienzo de laravado-eco-server
(Dentro de su raíz-donde su servidor de eco de laravel.JSON está colocado)
Debería comenzar con éxito. (Ahora queremos agregar esto al supervisor en su servidor, por lo que se inicia automáticamente y se reinicia en caso de que se bloquee)
Dentro de su/etc/supervisor/conf.D/Laravel-Echo.conf (solo crea este archivo dentro de su conf.D de la carpeta) Coloque lo siguiente:
[Programa: Laravel-Echo]
directorio =/var/www/my-website-holder
process_name =%(Program_name) S _%(Process_num) 02D
comando = Laravel-eco-server inicio
AutoStart = True
AutorStart = True
Usuario = Your-Linux-User
numprocs = 1
redirect_stderr = true
stdout_logfile =/var/www/my-website-volador/almacenamiento/logs/echo.registro
Una vez que coloque en su raíz de Laravel, puede ejecutar
pwd
Para obtener la ruta de su 'directorio' anterior y prefijo 'stdout_logfile'.
Su usuario será su usuario de Linux (vagabundo o ubuntu o algún otro)
Guarde el archivo y salga.
Si usaste Vim Laravel-Echo.Conf entonces cuando esté adentro, presione I (como Estambul) en su teclado para editar un archivo con VIM y luego escriba ESC siguiendo: WQ! Para cerrar el archivo y guardarlo.
A continuación, necesitamos ejecutar los siguientes comandos:
sudo supervisorctl detener todo
sudo supervisorctl readread
SUDO SupervisorCtl Recargar
Después de eso, verifique si Laravel Echo se está ejecutando
SUDO SupervisorCtl Status
Instale el cliente de Laravel Echo y Socket IO
Instalación de NPM-Save Laravel-Echo
Instalación de NPM --Have Socket.io-cliente
[/c] c
Y luego en tu bootstrap.JS (estoy usando vue js) registra tu eco
[cc lang = "bash" escapado = "true" width = "800"]
importar echo de "laravel-eco"
ventana.io = requerir ('socket.io-client ');
// tener esto en caso de que deje de ejecutar su
Laravel Echo Serverif (typeof io !== 'Undefinado')
ventana.Echo = new Echo (
Broadcaster: 'Socket.io ',
Anfitrión: ventana.ubicación.nombre de host + ': 6001',
);
Ahora revise nuevamente cómo escuchar sus eventos en canales específicos.
Siguiendo la documentación sobre la transmisión de Laravel que compartimos anteriormente, si establece su método Broadcaston () para devolver un nuevo PresenceChannel (explicaré el caso particular que hice, pero no dude en hacer preguntas en caso de que necesite algo más implementado. Encuentro que esto es de mayor complejidad que simplemente usar un canal público, por lo que podemos escalar sin problemas), entonces queremos escuchar ese canal en el lado de JavaScript (frontend).
Aquí hay un ejemplo concreto:
1. Empujé un evento a un canal de presencia (estaba tratando con encuestas)
función pública broadcaston ()
devolver nuevo presenceChannel ('encuesta.' . $ this-> encuesta-> id);
2. Después de impulsar el evento, pasará por canales.php. Allí queremos crear una autorización para este usuario. (Recuerde devolver una matriz para la autorización del canal de presencia y no un booleano.)
Broadcast :: Channel ('Encuesta.Survey_id ', function ($ user, $ Survey_id) return3. Luego, en mi componente VueJS que se carga en la página que quiero monitorear, defina un método que se iniciará desde el método creado () en la carga:
ListenforBroadcast (Survey_id)Obviamente, sacé algún código del contexto aquí, pero tengo esta matriz 'Users_Viewing' para mantener a mis usuarios actuales que se unieron al canal.
Y eso sería realmente.
Espero que pudieras seguir ya que intenté ser detallado como puedo.
Codificación feliz!