tol64
@tol64

Как отправлять несколько уведомлений клиенту за одно задание?

Всем привет!

Пробую найти решение, когда можно отправлять уведомления клиенту во время выполнения фонового задания.

class SeederController extends Controller
{
    public function index()
    {
        $job = new SeederJob();
        dispatch($job);

        return response()->json(["status" => "ok"], 200);
    }
}


class SeederJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function handle()
    {   
        WebSocketEventService::message("Start...");
        WebSocketEventService::testWebSocketProgress();
        WebSocketEventService::message("End...");
    }
}


class WebSocketEventService
{
    static public function message($data)
    {
        broadcast(new WebSocketEvent([
            "message" => $data
        ]));
    }

    static public function testWebSocketProgress()
    {
        $i = 0;
        $total = 100000000;
        $divisor = $total / 10;
        while ($i <= $total) {
            if (fmod($i, $divisor) == 0) {
                broadcast(new WebSocketEvent([
                    "process" => "Test...",
                    "current" => $i,
                    "total" => $total,
                ]));
            }
            $i++;
        }
    }
}


Но к клиенту уведомления приходят только после того, когда задание полностью выполнится.

602d2ca511dd6897112968.jpeg

602d2ccaea789468606657.jpeg

Как это можно реализовать так, чтобы уведомления отправлялись сразу же?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы