简体   繁体   English

Laravel Websockets 事件未触发

[英]Laravel Websockets events not firing

I've implemented Laravel Websockets along with Echo in my local environment and everything is working, but when deploying to production, it appears a connection can be made and it's subscribed to the channels, but events do not fire.我已经在本地环境中实现了 Laravel Websockets 和 Echo 并且一切正常,但是在部署到生产环境时,似乎可以建立连接并且订阅了频道,但事件不会触发。 And I'm clueless about what I'm doing wrong.而且我对自己做错了什么一无所知。

Here's my setup:这是我的设置:

.env file: .env文件:

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=someID
PUSHER_APP_KEY=someKey
PUSHER_APP_SECRET=someSecret
PUSHER_APP_CLUSTER=eu
PUSHER_SCHEME=http
PUSHER_USE_SSL=false

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MIX_PUSHER_USE_SSL=true
MIX_PUSHER_HOST=mydomain.com
MIX_PUSHER_PORT=443

Echo configuration: Echo配置:

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: process.env.MIX_PUSHER_APP_KEY,
  cluster: process.env.MIX_PUSHER_APP_CLUSTER,
  wsHost: process.env.MIX_PUSHER_HOST,
  wsPort: process.env.MIX_PUSHER_PORT,
  forceTLS: process.env.MIX_PUSHER_USE_SSL === true || process.env.MIX_PUSHER_USE_SSL === 'true',
  disableStats: true,
});

nginx config: nginx配置:

location /app/ {
    proxy_pass http://127.0.0.1:6001/app/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
}

location /apps/ {
    proxy_pass http://127.0.0.1:6001/apps/;
    proxy_set_header Host $host;
}

This is to set up a reverse proxy to be able to use my site's SSL这是为了设置一个反向代理,以便能够使用我网站的 SSL

websockets.php and broadcasting.php are left with all default values. websockets.phpbroadcasting.php保留所有默认值。

On the websockets dashboard at /laravel-websockets I am able to connect via port 443 and I can see it subscribed to my channels:/laravel-websockets的 websockets 仪表板上,我可以通过端口 443 进行连接,并且可以看到它订阅了我的频道:

订阅频道的 websocket

What I expect to see when an event should be triggered is something like this that I see in my local environment:我希望在何时触发事件时看到的是我在本地环境中看到的类似内容:

websockets api消息

But this does not appear in production.但这并没有出现在生产中。 As if it can subscribe to channels but not capture the api-message events.好像它可以订阅频道但不能捕获api-message事件。

This is my first time implementing websockets so I'm a little lost.这是我第一次实现 websockets,所以我有点迷茫。 Anyone see what I'm doing wrong?有人看到我做错了什么吗?

Ok, figured it out!好的,想通了!

What I didn't realize but makes perfect sense is that these API messages that get broadcast are queued.我没有意识到但非常有意义的是,这些被广播的 API 消息是排队的。 And if your queue is not consuming correctly, you'll never see them.如果您的队列没有正确消费,您将永远看不到它们。

In my local environment I used Laravel's sync queue driver, so that's why it worked locally, but on in production due to a config error my RabbitMQ queue was not being consumed correctly.在我的本地环境中,我使用了 Laravel 的sync队列驱动程序,这就是它在本地工作的原因,但是由于配置错误,我的 RabbitMQ 队列没有被正确使用,因此在生产中运行。

Once I fixed that, everything started working as expected :)一旦我解决了这个问题,一切都开始按预期工作:)

Anyway maybe the configuration listed in my question will help someone else who's trying to figure out how to do this.无论如何,我的问题中列出的配置可能会帮助其他试图弄清楚如何做到这一点的人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM