. Ich hoffe, dass er den Freunden in Not hilfreich sein wird!
Motivation
Ziel
Wählen Sie einen Dienst
Funktionen des Laravel-Echo-Server-Dienstes
Erstellen Sie einen Websocket-Dienst. Wir haben zunächst das Image oanhnn/laravel-echo-server verwendet, um den Container zu starten ist das, worauf wir gestoßen sind. Die erste Grube. Um dieses Problem schnell zu lösen, haben wir einen Supervisor basierend auf diesem Image hinzugefügt, der für die Aufgabe verantwortlich ist, den Serviceprozess nach dem Beenden neu zu starten, und unser eigenes Image erstellt.
# php artisan tinkerconfig('database.redis.options.prefix');
Da die Produktionsumgebung das HTTPS-Protokoll verwendet, muss ich dem Dienst ein Zertifikat hinzufügen. Da ich jedoch ein Node-Neuling bin und keine Erfahrung in der Konfiguration von Node-Programmen für die Verwendung von Zertifikaten habe, tue ich das grundsätzlich Nach mehreren Versuchen gab er auf und nutzte dann den Nginx-Proxy. Nach mehreren Versuchen war die Konfiguration schließlich erfolgreich.
server { listen port; server_name your-domain; ssl on; ssl_certificate path-to-pem; ssl_certificate_key path-to-key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location /socket.io { proxy_pass http://container-name:6002; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }}
Die Laravel-Übertragung unterteilt die Kanäle in: öffentlich, privat und aktuell (ich habe es möglicherweise falsch übersetzt, bitte korrigieren Sie mich), wobei die beiden letzteren einen autorisierten Zugriff erfordern. Wir müssen einen privaten Kanal verwenden, sodass nur autorisierte Personen unsere Veranstaltungen über das Frontend abonnieren können. Dies ist auch eine Falle, auf die wir gestoßen sind.
authEndpoint
und authHost
einen HTTP-POST an den Anwendungsserver. Die POST-Daten sind der Kanalname und übertragen die Autorisierungsdaten transparent im Header. In der Praxis stoßen wir auf zwei Probleme. Das erste Problem besteht darin, dass die Autorisierungs-Gatekeeping-Logik unseres Projekts nicht die Standardlogik von Laravel ist, sodass die durch die Standardeinstellung Broadcast::routes()
eingeführten Routen nicht direkt verwendet werden können. Nachdem wir das Problem entdeckt hatten, fügten wir unsere eigene Autorisierungsroute erneut hinzu und konfigurierten sie im Konfigurationselement authEndpoint
von laravel-echo-server.json.
Ein weiteres Problem besteht darin, dass wir nicht die Standardregeln des RESTFul-Protokolls verwenden: Der der Antwort entsprechende HTTP-Code zur Beschreibung des Fehlerstatus. Dadurch kann laravel-echo-server auch bei fehlgeschlagener Autorisierung keine Probleme und Rückmeldungen an das Frontend-Programm erkennen. Die Situation ähnelt dem Bild unten:
Früher oder später müssen die Schulden zurückgezahlt werden ...
Diese Funktionsentwicklung ist nicht so reibungslos wie ursprünglich angenommen. Die Hauptprobleme sind wie folgt:
Das obige ist der detaillierte Inhalt vonTeilen Sie den Aufbau des Laravel-Echo-Server-Broadcast-Dienstes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!