Ich erstelle eine Website mit Laravel Echo Server, Socket IO und Redis. Das Problem, mit dem ich konfrontiert bin, ist, dass alles lokal funktioniert, aber nicht auf meinem VPS-Server.
Wenn der Benutzer eine Ansicht betritt, die Socket IO erfordert, wird eine 404-Schleife angezeigt https://example.com:6001/socket.io/?EIO=4&transport=polling&t=O0DofMO net::ERR_CONNECTION_CLOSED
Auf Firefox kann ich diesen Fehler sehen, der detaillierter beschrieben wird
Ich wei? nicht, was es tun soll, aber ich denke, Socket IO versucht, ewig eine Verbindung herzustellen, aber es gelingt ihm nicht.
Verwendung von Laravel 6 auf Apache. Das ist meine Konfiguration:
apache.conf:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.example.com ServerName example.com ServerAlias www.example.com ServerAlias example.com DocumentRoot /var/www/html/project/public <Directory /var/www/html/project/public> AllowOverride All Allow from All </Directory> ErrorLog ${APACHE_LOG_DIR}/project.error.log CustomLog ${APACHE_LOG_DIR}/project.access.log combined SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
laravel-echo-server.json:
{ "authHost": "https://example.com", "authEndpoint": "/broadcasting/auth", "clients": [], "database": "redis", "databaseConfig": { "redis": {}, "sqlite": { "databasePath": "/database/laravel-echo-server.sqlite" } }, "devMode": true, "host": null, "port": "6001", "protocol": "http", "socketio": {}, "secureOptions": 67108864, "sslCertPath": "", "sslKeyPath": "", "sslCertChainPath": "", "sslPassphrase": "", "subscribers": { "http": true, "redis": true }, "apiOriginAllow": { "allowCors" : true, "allowOrigin" : "https://example.com", "allowMethods" : "GET, POST", "allowHeaders" : "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authori$ } }
Dieser Laravel-Echo-Server l?uft über Supervisor:
[program:echo-server] directory=/var/www/html/project command=laravel-echo-server start autostart=true autorestart=true user=www-data redirect_stderr=true stdout_logfile=/var/www/html/project/storage/logs/echoserver.log
Ich habe zuerst versucht herauszufinden, ob Port 6001 abgeh?rt wird, es scheint:
> netstat -tulnp | grep 6001 tcp6 0 0 :::6001 :::* LISTEN 1816/laravel-echo-server
Mein app.js:
require('./bootstrap'); require('jquery'); require('jquery-ui'); require('uikit'); import UIkit from 'uikit'; import Icons from 'uikit/dist/js/uikit-icons'; import $ from 'jquery'; import 'jquery-ui/ui/widgets/sortable'; window.$ = window.jQuery = $; window.UIkit = UIkit; window.UIkit.use(Icons); require('./workspace_list'); require('./workspace_add'); import Echo from 'laravel-echo'; window.Echo = new Echo({ broadcaster: 'socket.io', host: window.location.hostname + ':6001', });
Und die Ansicht, wo sich der Socket IO-Client befindet:
<!-- some code ... --> <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.min.js" integrity="sha512-eVL5Lb9al9FzgR63gDs1MxcDS2wFu3loYAgjIH0+Hg38tCS8Ag62dwKyH+wzDb+QauDpEZjXbMn11blw8cbTJQ==" crossorigin="anonymous"></script> <script src="{{ mix('js/app.js') }}"></script>
Laravel Echo Server übertr?gt Ereignisse beim Senden eines Vorgangs korrekt, da ich sehe, dass sie über tail -f echoserver.log weitergeleitet werden
Aber ich sehe nie, dass sich ein Benutzer verbindet, sodass niemand Daten von der Frontend-Seite empfangen kann.
Bitte beachten Sie, dass auf meinen VPS über eine Domain mit DNS-Weiterleitungen zugegriffen werden kann. Ich bin mir nicht sicher, ob dies ein Problem darstellt.
Wenn jemand eine Ahnung hat, würde ich gerne herausfinden, was los ist...
似乎現(xiàn)在可以工作。
我將 laravel-echo-server.json 配置為在 HTTPS 上工作。
這使得事件廣播再次工作,但通道身份驗證不起作用。
所以我改變了 Socket.IO 的導(dǎo)入方式:
至
這些改變起到了作用。
請注意,刪除頻道默認前綴有很大幫助。