دوستان reverb لاراول رو راه اندازی کردم در بخش event یک فایل با این دستورات ایجاد کردم :
class PrivateEnevt implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
/**
* Create a new event instance.
*/
public function __construct($message)
{
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return array<int, \Illuminate\Broadcasting\Channel>
*/
public function broadcastOn(): array
{
return [
new Channel('test'),
];
}
public function broadcastWith(): array
{
return [
'message' => $this->message
];
}
}
در بخش blade هم :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>API</title>
</head>
<body>
@vite('resources/js/app.js')
<script>
setTimeout(() => {
window.Echo.private("test")
.listen('PrivateEnevt', (e)=>
{
console.log(e);
})
}, 500);
</script>
</body>
</html>
قرار دادم . یه روت دادم که blade رو صدا می زنه و یک روت هم داخل web.php نوشتم :
Route::get('/ws', function()
{
event(new PrivateEnevt('hello'));
});
حالا وقتی ادرسی که به blade میده رو صدا می زنم هیچ اروری نمی یاد و داخل console داره wss رو با موفقیت می بینه اما وقتی ادرس /sw رو صدا می زنم که یک مسیج بفرسته هیچ event دریافت نمی کنم داخل صفحه .
کانفیگ reverb
REVERB_APP_ID=365;lk465496
REVERB_APP_KEY=kijgghkjhkjhyg
REVERB_APP_SECRET=uygukjhguyg
REVERB_HOST="domain"
REVERB_SERVER_PORT=8080
REVERB_SERVER_HOST=127.0.0.1
REVERB_PORT=443
REVERB_SCHEME=https
REVERB_TLS_CERT_PATCH="/etc/letsencrypt/live/domain/fullchain.pem"
REVERB_TLS_KEY_PATCH="/etc/letsencrypt/live/domain/privkey.pem"
reverb رو هم بدون هیچ مشکلی با php artisan ران کردم .
یک موردی که هست که event ها دریافت میشن داخل horizon و در حالت pending می مونن :
{
"event": {
"data": "hello",
},
"tries": null,
"timeout": null,
"backoff": null,
"maxExceptions": null,
"connection": null,
"queue": null,
"delay": null,
"afterCommit": null,
"middleware": [
],
"chained": [
],
"chainConnection": null,
"chainQueue": null,
"chainCatchCallbacks": null
}
درود. من چند مورد رو راهنمایی میکنم شاید مشکلتون حل شد.
اول از implements ShouldBroadcastNow استفاده کنید که ایونت درجا dispatch بشه. و برای اجرا کردن reverb از
php artisan reverb:start --debug
استفاده کنید تا لاگ ایونت هارو ببینید.
و برای اجرا event از
broadcast(new PrivateEnevt('hello'));
استفاده کنید.
اگر در لاگ reverb چیزی مشاهده کردید که درست کار میکنه در غیر این صورت در جایی از config مشکل هست.
ضمن اینکه از config لاراول echo مطمان بشید.
البته با نوجه به اینکه ایونت ها در pending میمونن چون دارید از implements ShouldBroadcast استفاده میکنید باید queue هارو با دستور
php artisan queue:work --tries=3
اجرا کنید. شاید مشکل از run نبود صف ها هستش.
امیدوارم مشکلتون رفع بشه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟