我正在阅读本教程Introducing Laravel Echo。广播的事情正在努力完善。每当我执行命令php artisan chat:message "something"
时。事件被触发并且数据存储在数据库中。但转到Laravel Echo。我尝试了很多,但我不会去哪里。我已将Echo放入/js/app.js
,但在文档中提到了/js/bootstrap.js
。由于我正在学习本教程,因此我将其放入/js/app.js
Echo未在日志中显示数据。我正在使用ubuntu
。
测试活动:
class TestEvent implements ShouldBroadcast
{
use InteractsWithSockets, SerializesModels;
public $message;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($user, $message)
{
//
$this->user = $user;
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return "chat-room";
}
}
发送聊天命令代码:
class SendChatMessage extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'chat:message {message}';
protected $description = 'Send chat message.';
public function handle()
{
// Fire off an event, just randomly grabbing the first user for now
$user = \App\User::first();
$message = \App\Message::create([
'user_id' => $user->id,
'content' => $this->argument('message')
]);
event(new \App\Events\TestEvent($message, $user));
}
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
}
Laravel Echo:
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'my-key'
});
window.Echo.channel('chat-room')
.listen('TestEvent', (e) => {
console.log(e.user, e.message);
});
每当我从推送器发送一个事件时,还有一件事。 Pusher能够正确发送它。
答案 0 :(得分:0)
不确定它是否仍然相关,但可能有助于某人。
我正在使用Laravel 5.4并在推送器中使用'eu'集群。请注意,有时推动者会发疯。它开始晚收到广播事件。所以,我使我的事件实现了ShouldBroadcastNow合同而不是ShouldBroadcast来克服这个问题。我没有使用队列将事件发布到推送器。即便如此,有时候我注意到接收事件的延迟。无论如何,广播部分都很好。
现在,在客户端,这是我用来监听从推送器触发的事件的脚本(在我的情况下是私人频道)
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'pusher',
key: '<your_pusher_app_key>',
csrfToken: window.Laravel.csrfToken,
cluster:'eu',
encrypted: true });
如果对bootstrap.js进行更改,则应编译JS,否则您的更改将不会打包到公用文件夹中。 Laravel 5.4使用Laravel Mix,编译命令是“npm run dev”
window.Echo.private('<channel_name_without_prefixing_private_keyword>')
.listen("<Just the event class name and not fully qualified name>", function(e){
console.log(e);
});
这对我有用。此外,确保在config \ app.php文件中取消注释BroadcastServiceProvider。它默认不启用。
Broadcast::channel('<channel_name_without_private_prefix>', function ($user) {
//Auth check
return true;
});