我在后端使用beyondcode/laravel-websockets
软件包,在前端使用laravel-echo
和pusher-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.php
中BroadcastServiceProvider
中的评论
App\Providers\BroadcastServiceProvider::class,
并且广播授权成功
我该如何解决?我正在使用laravel 7.0。非常感谢☺