在我的生产服务器上迁移到Ubuntu20.04之后,我对让laravel工作有问题。它曾经在18.04上工作。两者都有相同的节点版本(我的开发工具是v14)。我想知道是否还有其他人有问题或可能的解决办法。顺便说一句,我试着换成了和Soketi,但那是一场噩梦,我花了3天的时间试图让他们连接起来(运气不好)。
在迁移到Ubuntu20.04时,我更新了package.json。我知道socket io和laravel-echo服务器有问题,所以这些都保持不变。
在浏览器中,没有网络错误。到达套接字io。同样,在控制台中也没有抛出错误。设置调试时,我在Redis监视器和laravel-echo服务器中看到导出事件.但是,javascript中的Echo从来没有捡到它。
如果有任何反馈的话。
Ubuntu 20.04
NodeJs 14.19.0
Laravel-echo-server: 1.6.3
Laravel Echo: 1.11.3
Socket IO: 2.3.0
Broadcast driver: Redis
Queue: Beanstalk(域和应用程序信息隐藏)
.env文件
ECHO_ID=APP_ID
ECHO_KEY=APP_KEY
ECHO_PORT=6001
ECHO_SSL_CRT=/etc/ssl/certs/DOMAIN.crt
ECHO_SSL_KEY=/etc/ssl/certs/DOMAIN.key
BROADCAST_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_DRIVER=beanstalkdlaravel-echo-server.json
{
"authHost": "https://DOMAIN",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "APP_ID",
"key": "APP_KEY"
}
],
"database": "redis",
"databaseConfig": {
"redis": {
"port": "6379",
"host": "127.0.0.1"
},
"sqlite": {}
},
"devMode": false,
"host": null,
"port": "6001",
"protocol": "https",
"socketio": {
"cors": {
"origin": "https://DOMAIN",
"credentials": true
}
},
"sslCertPath": "/etc/ssl/certs/DOMAIN.crt",
"sslKeyPath": "/etc/ssl/certs/DOMAIN.key",
"sslCertChainPath": "",
"sslPassphrase": "",
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
}
}
app.js
import Echo from "laravel-echo"
window.io = require("socket.io-client");
window.Echo = new Echo({
broadcaster: "socket.io",
host: window.location.hostname
});
nginx site.conf (使用代理)
location /socket.io/ {
proxy_pass https://127.0.0.1:6001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
}admin.js
Echo.channel('export')
.listen('PollExportEvent', (e) => {
console.log('export called');
});
PollExportEvent.php
class PollExportEvent extends Event implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var array
*/
public $data = [];
/**
* The name of the queue on which to place the event.
*
* @var string
*/
public $broadcastQueue;
/**
* PollExportEvent constructor.
* @param $data
*/
public function __construct($data)
{
$this->data = $data;
$this->broadcastQueue = 'event_tube';
}
/**
* Get the channels the event should be broadcast on.
*
* @return \Illuminate\Broadcasting\Channel
*/
public function broadcastOn(): Channel
{
return new Channel('export);
}
}发布于 2022-02-03 21:01:32
为主机添加了端口,并删除了我的Nginx配置,现在它开始工作了。
import Echo from "laravel-echo"
window.io = require("socket.io-client");
window.Echo = new Echo({
broadcaster: "socket.io",
host: window.location.hostname + ':6001'
});
https://stackoverflow.com/questions/70974544
复制相似问题