当前位置: 首页 > 知识库问答 >
问题:

Laravel回声私人频道不听

岳劲
2023-03-14

我正在尝试创建一个实时聊天应用程序。我使用了Laravel Echo、Redis和socket io。

但是laravel echo没有收听私人广播聊天频道。

应用程序事件消息推送

public function broadcastAs()
{
  return 'new.message';
}

public function broadcastOn()
{
  return new PrivateChannel("application-chat-{$this->message->job_application_id}");
}

路由/频道。php

php prettyprint-override">Broadcast::channel('application-chat-{job_application_id}', function ($user, $job_application_id) {
    return auth()->check();
});

存储消息资源方法

public function store(StoreFormRequest $request, JobApplication $application)
{
   $request->merge([
      'sender_id' => $request->user()->id,
   ]);

   $message = $application->messages()->create($request->all())
                          ->load(['sender', 'receiver']);

   event(new MessagePushed($message));

   return response()->json([
      'message' => $message,
   ]);
}

收听私人频道

window.Echo.private(`application-chat-${this.messageApplication}`)
      .listen('.new.message', (data) => {
          console.clear();
         console.log('Got event...', data);
});

共有2个答案

施赞
2023-03-14

我认为问题在于名称空间

window.Echo = new Echo({
    namespace: 'App.Events',
});
陆承宣
2023-03-14

希望对调试有帮助:

Laravel echo服务器配置:

{
    "authHost": "domain.local",
    "authEndpoint": "/broadcasting/auth",
    "database": "redis",
    "databaseConfig": {
        "redis": {}
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": {
        "allowCors": false,
        "allowOrigin": "",
        "allowMethods": "",
        "allowHeaders": ""
    }
}

php artisan队列:工作:

检查队列是否发送事件

拉维回声服务器

检查用户是否加入频道,回声服务器是否发送事件

Laravel回声:

也许是broacastAs的问题。尽量不要使用它。别忘了将名称空间属性添加到配置中。

window.Echo = new Echo({
    namespace: 'App.Events',
    broadcaster: 'socket.io',
    host: window.location.protocol + '//' + window.location.hostname + ':6001',
    auth: {
        headers: {
            Authorization: //auth
        }
    }
});

事件名称=事件类的名称

window.Echo.private(`application-chat-${this.messageApplication}`)
    .listen('MessagePushed', (data) => {
        console.log(data);
    });
 类似资料:
  • 我正在尝试使用专用通道验证laravel echo。每次我收到“无法验证到private-U详细信息。1”。“basket_details”这是通道名称,1是参数。 当我使用公共频道时,一切都很完美。因此,我认为auth部分存在一些问题。 这是我的错误日志 这是我的事件文件。 这是我的频道。php 这是我的js文件 这是我的BroadcastServiceProvider 这是我的laravel

  • 为了在频道上播放事件,我使用了laravel Echo、redis和socket io。 这是我的活动: 插座。io服务器我正在使用laravel echo服务器,下面是配置: 这是文件中的Echo结构: 运行laravel echo server和call event后,控制台中会显示以下日志,其中显示到频道的事件广播: 但Echo无法收听频道并发生事件。 问题是什么?

  • 我已经为我的应用程序设置了Pusher和Laravel Echo,以便在某些事件触发时通知用户。 我已经测试过,看看设置是否通过在“公共频道”上播放而工作,并成功地看到这是工作。 以下是活动本身: 公共频道: app/resources/assets/js/bootstrap。js: 和Laravel回声注册:(它是在我的主布局的头部部分,事件射击视图延伸。) 现在,这种设置适用于公共频道广播,但

  • 我目前正在我的Nuxt应用程序中实现WebSocket。我有一个Laravel后端,我使用Pusher和Laravel Echo。问题是,当尝试连接/订阅专用频道时,由于客户端通过广播/authendpoint获得授权,因此未命中单个频道的auth(channels.php)。因此,登录用户有可能访问他们不应该访问的私有通道。 我的代码/配置如下: NUXT前端: 努克斯。配置。js }, 拉威尔

  • 活动是: 路线/频道。php是: 在刀片文件中: 广播频道工作正常。但在私密频道里,这是行不通的。并且在控制台中没有显示任何错误 我使用拉威尔回声和推进器

  • 我有安装插座。io与laravel echo一起加入并收听laravel广播频道。公共频道工作正常,因为它们不需要任何授权。专用通道未按预期工作,我可以使用套接字加入任何专用通道。未传递授权令牌的io客户端。 插座io客户端 Laravel Echo服务器配置 航道 广播服务提供商 用户配置 127.0.0.1:8000/无令牌访问时的广播/授权响应 Laravel回声服务器 所以我猜larave