Sử dụng Laravel Broadcast với Pusher để Xây dựng Ứng dụng Thời Gian Thực

Sử dụng Laravel Broadcast với Pusher để Xây dựng Ứng dụng Thời Gian Thực

Laravel là một framework PHP mạnh mẽ và linh hoạt, nổi bật với khả năng hỗ trợ các ứng dụng thời gian thực thông qua broadcasting. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng Laravel Broadcast với Pusher để xây dựng một ứng dụng thời gian thực. Bạn sẽ học cách cài đặt và cấu hình Pusher, thiết lập các kênh broadcast trong Laravel, và cuối cùng là gửi và nhận các sự kiện thời gian thực trong ứng dụng của bạn. Qua hướng dẫn này, bạn sẽ thấy rõ sự tiện lợi và hiệu quả của việc tích hợp Laravel và Pusher trong việc phát triển ứng dụng hiện đại.

Các bước thực hiện : 

Bước 1 : Tạo laravel app

Đầu tiên chúng ta cần tạo 1 laravel app với dòng lệnh : 

composer create-project laravel/laravel labroadcast

Tạo file config broadcasting trong thư mục  config/broadcasting.php với lệnh :

php artisan install:broadcasting

Vào file .env thêm config :

PUSHER_APP_ID=16421xx
PUSHER_APP_KEY=9b1df2e5ce5bef2c9xxx
PUSHER_APP_SECRET=5c4d039ef6d91ca8fxxx
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=ap1

và 

BROADCAST_CONNECTION=pusher

Bước 2 : Add pusher vào project :

Chúng ta cài pusher server với dòng lệnh :

composer require pusher/pusher-php-server

Bước 3 : Tạo router 

Trong file routes/web.php

Route::get('/channelsend',[\App\Http\Controllers\ChannelController::class,'index']);

Bước 4 : Tạo controller :

Trong file app/Http/Controllers/ChannelController.php : 

toOthers();
    }
}

Bước 5 : Tạo event :

Trong file  :app/Events/TestbroadcastEvent.php
 

message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return array
     */
    public function broadcastOn(): array
    {
        return [
            //new PrivateChannel('private-channelp.1'),
           // new Channel('private-channelp.1'),
           new Channel('channelp.1'),
        ];
    }
    public function broadcastAs()
    {
        return 'create';
    }
}

Code ở client

Code trên nextjs demo với file src/app/test/page.tsx

'use client';

import React, { useEffect, useState } from 'react';
import Head from 'next/head';
import Script from 'next/script';

const TestPage = () => {
    const [dataget, setDataget] = useState('');

    useEffect(() => {
        if (typeof window !== "undefined") {
            if (!window.pusherInitialized) {
                // Sử dụng window.Pusher sau khi script đã được tải
                window.Pusher.logToConsole = true;
                const pusher = new window.Pusher('9b1df2e5ce5bef2c9xxx', {
                    cluster: 'ap1',
                    // channelAuthorization: {
                    //     transport: "jsonp",
                    //     endpoint: "http://localhost:8000/broadcasting/auth",
                    // },
                });

                const channel = pusher.subscribe('private-channelp.1');
                channel.bind('create', function (data) {
                    console.log(data.message);
                    setDataget(data.message);
                });

                window.pusherInitialized = true;
            }
        }
    }, []);

    return (
        <>