Laravel Echo dan Socket IO memindahkan pengundian 404 ERR_CONNECTION_CLOSED dalam gelung
P粉029057928
P粉029057928 2024-03-26 16:36:46
0
1
461

Saya sedang membina tapak web menggunakan Laravel Echo Server, Socket IO dan Redis. Masalah yang saya hadapi ialah semuanya berfungsi secara tempatan tetapi tidak pada pelayan VPS saya.

Apabila pengguna memasukkan paparan yang memerlukan Soket IO, gelung 404 akan muncul https://example.com:6001/socket.io/?EIO=4&transport=polling&t=O0DofMO net::ERR_CONNECTION_CLOSED

Pada FireFox saya dapat melihat ralat ini, diterangkan dengan lebih terperinci

Saya tidak tahu apa yang sepatutnya dilakukan, tetapi saya rasa Socket IO cuba untuk menyambung selama-lamanya tetapi tidak boleh berjaya.

Menggunakan Laravel 6 pada Apache. Ini ialah konfigurasi saya:

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$
        }
}

Pelayan gema laravel ini dijalankan melalui penyelia:

[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

Saya mula-mula cuba untuk mengetahui sama ada port 6001 sedang didengari, nampaknya:

> netstat -tulnp | grep 6001
tcp6       0      0 :::6001                 :::*                    LISTEN      1816/laravel-echo-server

Apl saya.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',
});

Dan pandangan di mana pelanggan Socket IO berada:

<!-- 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 menyiarkan acara dengan betul apabila menyerahkan operasi kerana saya melihatnya melalui tail -f echoserver.log

Tetapi saya tidak pernah melihat mana-mana pengguna menyambung, jadi tiada siapa yang dapat menerima sebarang data dari bahagian hadapan.

Sila ambil perhatian bahawa VPS saya boleh diakses melalui domain dengan ubah hala DNS, tidak pasti sama ada ini akan menjadi isu.

Jika sesiapa mempunyai petunjuk, saya dengan senang hati akan mengetahui apa yang sedang berlaku...

P粉029057928
P粉029057928

membalas semua(1)
P粉269530053

Nampak bekerja sekarang.

Saya mengkonfigurasi laravel-echo-server.json untuk bekerja melalui HTTPS.

Ini menjadikan penyiaran acara berfungsi semula, tetapi pengesahan saluran tidak berfungsi.

Jadi saya menukar cara Socket.IO diimport:

sssccc

kepada

sssccc

Perubahan ini berjaya.

Sila ambil perhatian bahawa mengalih keluar awalan lalai saluran banyak membantu.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan