Laravel 为一个用户广播作品

Laravel broadcast works for one user

我正在按照互联网上的一个简单示例进行通知跟踪。不幸的是,到目前为止,我设法让它只对一个用户有效。当我打开两个用户时,从 A 到 B 的消息有效,但从 B 到 A 的消息无效。 有人可以帮助我吗?

channels.php

Broadcast::channel('App.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

bootstrap.js

window.Pusher = require('pusher-js');
import Echo from "laravel-echo";

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'some-key',
    cluster: 'mt1',
    forceTLS: true
});

global.js

    var urlChannel = 'App.User.' + $('#user_logado_id').val();
    window.Echo.private(urlChannel)
        .notification((notification) => {
            addNotificacao(notification);
        });

向用户发送通知。

$user->notify(new NotificacaoPadrao($param));

我希望向所有用户发送通知。

那是因为第一个用户的频道是 App.User.1,第二个是 App.User.2。您应该创建一个供他们共享的频道。例如:App.Channel.1-2.

您可以同时传递发送者和接收者user_id。所以在你的 channels.php:

Broadcast::channel('App.User.{from_user_id}.{to_user_id}', function ($user, $from_user_id, $to_user_id) {
    return (int) $user->id === (int) $from_user_id || (int) $user->id === (int) $to_user_id;
});

执行此操作时,请记住两个用户必须调用相同的频道名称。例如。如果您有用户 12 互相发送消息,则两者的 URL 频道应该是 'App.User.1.2' 而不是 'App.User.2.1'.

实际上有很多方法可以做到这一点,一种解决方案是我上面提到的,但这只适用于一对一消息,而不适用于群组消息。当你想发送群消息时,你应该创建 2 个表:channels (id, name) 和 channel_users (id, channel_id, user_id)。你的广播频道路线将是这样的:

Broadcast::channel('App.User.{channel_id}', function ($user, $channel_id) {
    return ChannelUser::where('channel_id', $channel_id)->where('user_id', $user->id)->exists();
});