【问题标题】:Laravel Websockets Error in connection Error during WebSocket handshake: Unexpected response code: 404Laravel Websockets Error in connection Error during WebSocket handshake: Unexpected response code: 404
【发布时间】:2021-01-22 13:08:08
【问题描述】:

我正在尝试使用 this library 在本地主机上设置 laravel websockets

我收到了这个错误

我已经安装了软件包并在我的本地主机上启动了服务,运行 php artisan websockets:serve

我的 Bootstrap.js 是:

import Echo from "laravel-echo"

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    wsHost: window.location.hostname,
    wsPort: 6001,
    disableStats: true,
});
window.Echo.channel('DemoChannel').listen('WebsocketDemoEvent',(e) => function() {
    console.log(e);
});

【问题讨论】:

    标签: php laravel laravel-websockets


    【解决方案1】:

    新建中间件:app/Http/Middleware/cors.php

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    
    class Cors
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle(Request $request, Closure $next)
        {
            return $next($request)
            ->header('Access-Control-Allow-Origin', '*')
            ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
        }
    }
    

    将cors中间件添加到app/Http/Kernel.php

    protected $routeMiddleware = [
        //default laravel middleware
        'cors' => \App\Http\Middleware\Cors::class,
    ];
    

    将新的 cors 中间件添加到您的路由中

    Route::get('/broadcast', function () {
        broadcast(new hello());
    });
    })-> middleware('cors'); 
    

    ---注意--- 这现在将接受来自 ANYWHERE 的请求。

    这在 localhost 上很好,但是当您移动到实时服务器时,您需要更改:

    ->header('Access-Control-Allow-Origin', '*')
    

    ->header('Access-Control-Allow-Origin', 'http://www.yourdomain.com')
    

    或者您需要创建一个 api 密钥以与每个请求一起传递,以便您可以拥有公共 api(不推荐,但这是一个可行的解决方法)

    【讨论】:

    • 不,它不起作用。仍然显示相同的错误
    • 你能分享你的代码吗?所以我可以看到发生了什么
    • 你想看活动吗?
    • 再次查看错误,我发现它正在尝试与 pusher 通信,如果您正在使用 ws:serve 托管您自己的 ws 服务器,您要发送什么给 pusher?
    • @aidanbyrne 如果你仔细观察它是一个后备,它首先尝试它自己的 WShost 失败,然后它在推送主站点上后备。所以他们的问题更多是为什么第一个请求会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2017-07-20
    • 2020-12-04
    • 2019-04-16
    • 2012-07-04
    • 2015-10-31
    • 1970-01-01
    相关资源
    最近更新 更多