在私人频道上播放laravel不适用于laravel-echo和laravel-websockets

时间:2020-07-06 07:37:17

标签: php laravel websocket pusher laravel-echo

我在后端使用beyondcode/laravel-websockets软件包,在前端使用laravel-echopusher-js

我想通过websockets从我自己的服务器向用户发送私人消息。

后端

routes/channel.php

use Illuminate\Support\Facades\Broadcast;
use App\Models\User;

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

app/Events/NewPrivateMessage.php

...
class NewPrivateMessage implements ShouldBroadcast{

    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct(Message $message){
        $this->message = $message;
    }

    public $message;

    public function broadcastOn(){
        return new PrivateChannel('users.'.$this->message->user_id);
    }

    public function broadcastWith(){
        return ['message' => $this->message];
    }
}

config/broadcasting.php

...
    'connections' => [
        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'encrypted' => true,
                'host' => '127.0.0.1',
                'port' => 6001,
                'scheme' => 'http'
            ],
        ],
        ...
    ],

前端

...
import Echo from 'laravel-echo';

window.SPY = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    wsHost: window.location.hostname,
    wsPort: 6001,
    disableStats: true,
    auth: {
        headers: {
            Authorization: `${store.state.auth.token.token_type} ${store.state.auth.token.access_token}`
        }
    }
});

window.SPY.private(`users.${store.state.auth.user.id}`)
    .listen('NewPrivateMessage', (e) => {
        console.log(e);
    });


但是当我在下面的代码中运行修补程序时,什么也没有发生,没有日志,也没有console.log()

broadcast(new \App\Events\NewPrivateMessage(\App\Models\Message::first()));

我确定我会删除config/app.phpBroadcastServiceProvider中的评论

App\Providers\BroadcastServiceProvider::class,

并且广播授权成功

the auth for broadcasting is successful

另外,我确定我已经连接了websockets enter image description here

我该如何解决?我正在使用laravel 7.0。非常感谢☺

0 个答案:

没有答案