Laravel广播适用于一个用户

I am doing a notification tracking by following a simple example from the internet. Unfortunately, so far, I've managed to make it work for only one user. When I open two users, the message from A to B works, but from B to A does not work. Can someone help me?

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);
        });

Send notification to user.

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

I would like notifications to be sent to all users.

2个回答



这是因为第一个用户的频道是App.User.1,第二个是App.User.2。 您应该创建一个为两者共享的频道。 例如:App.Channel.1-2。</ p>
</ div>

展开原文

原文

That's because first user's channel is App.User.1, and second one is App.User.2. You should create a channel that's shared for both of them. For example: App.Channel.1-2.

dsd30433
dsd30433 它应该工作。 如果$('#user_loagdo_id')具有当前登录用户的值,那么您正在正确地侦听事件。 然后你的后端必须有错误。
大约一年之前 回复
dongmei1828
dongmei1828 我有一个邀请系统,当用户A邀请B时,会触发global.js代码,但是当B邀请A时,会发送通知,但不会触发global.js代码
大约一年之前 回复
dpkt31779
dpkt31779 是否要向所有用户或私有1-1频道发送通知?
大约一年之前 回复
dqrmkdu25623
dqrmkdu25623 但它不会向每个用户的私人频道发送通知吗? 或者我必须只为所有用户使用一个频道?
大约一年之前 回复

You can pass both sender and receiver user_id. So in your 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;
});

When doing this, you should remember that both user must call the same channel name. E.g. If you have user 1 and 2 sending messages to each other the URL channel of both should be 'App.User.1.2' and NOT 'App.User.2.1'.

Actually there are many ways to do this, one solution is what I mentioned above, but this only works on 1-1 messaging, NOT group message. When you want to send a group message you should create 2 tables: channels (id, name) and channel_users (id, channel_id, user_id). And your broadcasts channel route will be like this:

Broadcast::channel('App.User.{channel_id}', function ($user, $channel_id) {
    return ChannelUser::where('channel_id', $channel_id)->where('user_id', $user->id)->exists();
});
down100009
down100009 正如我上面所解释的那样,为了让其他人接收通知,两者都应该听同一个url频道。 根据问题中的代码,用户都会收到不同的网址渠道。 例如。 如果用户1和2正在聊天,则用户1正在使用频道App.User.1,而用户2正在使用频道App.User.2。 因此只有1个正在接收消息。 用户必须使用SAME频道才能接收消息。
大约一年之前 回复
dtr53557
dtr53557 现在我很好地理解了这个概念,但我正在测试两个已登录的用户,但只有一个通过websocket获取通知,这是我缺少的东西?
大约一年之前 回复
drcrc28428
drcrc28428 这是对此的解释。 路由广播应返回布尔值true或false。 如果返回值为true,则用户将收到通知。 如果返回值为false,则用户将不会收到通知。
大约一年之前 回复
dongping9475
dongping9475 好吧,它会工作,但它会向所有用户发送通知。
大约一年之前 回复
douwu7168
douwu7168 根据这个逻辑,这应该不起作用吗? Broadcast :: channel('notification',function($ user){return true;}); 只是为了测试....
大约一年之前 回复
doubiao1734
doubiao1734 是的,用户必须在同一频道,发送和接收通知。 您必须先插入频道。 显然,不在频道中的用户将无法接收通知。
大约一年之前 回复
dongyao8698
dongyao8698 据我了解,您的解决方案会更优雅,但您的意思是,发送通知用户必须在同一频道上吗? 一种更简单的方法是为此使用唯一的通道名称?
大约一年之前 回复
dongxia2068
dongxia2068 请检查我的更新答案。
大约一年之前 回复
dsvq5069
dsvq5069 抱歉,但据您了解,通知源不在客户端上,而是在服务器上。 服务器发送给特定用户或多个用户。 我错了? 在我的案例中,我认为在两个用户之间创建一个频道没有意义。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐