Laravel Echo und Socket IO übertragen Abfrage 404 ERR_CONNECTION_CLOSED in Schleife
P粉029057928
P粉029057928 2024-03-26 16:36:46
0
1
447

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...

P粉029057928
P粉029057928

Antworte allen(1)
P粉269530053

似乎现在可以工作。

我将 laravel-echo-server.json 配置为在 HTTPS 上工作

这使得事件广播再次工作,但通道身份验证不起作用。

所以我改变了 Socket.IO 的导入方式:



这些改变起到了作用。

请注意,删除频道默认前缀有很大帮助。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!