我想与Laravel + Redis + socket.io建立socket.io连接。
我在resources/assets/js/bootstrap.js
中拥有的是:
从“ laravel-echo”导入Echo;
window.io = require('socket.io-client');
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
window.Echo.channel('channel-name')
.listen('App.Events.ProfileUpdated', (e) => {
alert('worked!');
console.log('worked!');
});
,但它返回跨域请求已被阻止:“同源起源”策略不允许读取http://mysite.local:6001/socket.io/?EIO=3&transport=polling&t=MQRqI94处的远程资源。 (原因:CORS请求未成功)。
然后,我尝试使用代码为const io = require('socket.io')(server, { origins: '*:*'});
的链接here允许跨源访问,但是我没有任何服务器变量,因为我既不需要http
也不需要{{1 }}。我不能使用express
返回io.set('origins', '*:*');
,我也用过TypeError: io.set is not a function
和window.io
,没有结果:|
然后我创建了一个名为cors的中间件,其代码如下:
io.origins('*:*')
我再次将其添加到return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
中没有任何结果:(。我以前使用过routeMiddleware
,但是我创建了一个名为localhost/mysite
的虚拟主机,以确保mysite.local
不变套接字请求的内容,即localhost/mysite
。
就像@SalmanZafar所说的那样,我使用link绕过了cors,这是我的http://mysite.local:6001
命令的一部分,其中安装了cors中间件:
php artisan route:list
我该如何解决?