0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng Dẫn Sử Dụng Laravel Reverb cho Ứng Dụng Thời Gian Thực

Đăng vào 2 ngày trước

• 4 phút đọc

Giới thiệu về Laravel Reverb

Trong phiên bản cập nhật Laravel 11, Taylor Otwell đã giới thiệu nhiều tính năng hữu ích mới, trong đó nổi bật là Laravel Reverb. Laravel Reverb cung cấp khả năng giao tiếp WebSocket thời gian thực nhanh chóng và khả năng mở rộng dễ dàng đến ứng dụng của bạn. Nó tích hợp hoàn hảo với công cụ phát sóng sự kiện hiện có của Laravel.

Reverb được xây dựng dựa trên EventLoop của ReactPHP thay vì sử dụng phương pháp Long Polling hay các cơ chế HTTP tương tự. Điều này cho phép Reverb xử lý bất đồng bộ một cách hiệu quả hơn và cải thiện đáng kể hiệu suất ứng dụng của bạn.

Cài đặt Laravel Reverb

Để cài đặt Laravel Reverb, bạn chỉ cần chạy lệnh sau trong Terminal:

Copy
php artisan install:broadcasting

Lệnh Artisan này sẽ tự động cài đặt Reverb với cấu hình mặc định hợp lý thông qua lệnh reverb:install.

Cách cấu hình Reverb

Bạn có thể cập nhật cấu hình của Reverb bằng cách điều chỉnh các biến môi trường trong tệp .env hoặc thông qua tệp cấu hình config/reverb.php. Để thiết lập kết nối giữa client và server, bạn cần định nghĩa thông tin xác thực ứng dụng Reverb như sau:

Copy
REVERB_APP_ID=my-app-id
REVERB_APP_KEY=my-app-key
REVERB_APP_SECRET=my-app-secret

Ngoài ra, bạn cũng có thể chỉ định nguồn gốc cho phép cho các request từ client bằng cách cập nhật tùy chọn allow_origins trong tệp cấu hình. Ví dụ:

Copy
'apps' => [
    [
        'id' => 'my-app-id',
        'allowed_origins' => ['*'],
    ],
]

Reverb cho phép bạn phục vụ nhiều ứng dụng bằng cách chỉ định nhiều ứng dụng trong tệp cấu hình config/reverb.php:

Copy
'apps' => [
    [
        'id' => 'my-app-one',
    ],
    [
        'id' => 'my-app-two',
    ],
],

Khởi Chạy Máy Chủ Reverb

Để khởi chạy máy chủ Reverb, bạn sử dụng lệnh sau:

Copy
php artisan reverb:start

Mặc định, máy chủ sẽ khởi động trên địa chỉ 0.0.0.0:8080. Nếu muốn thay đổi địa chỉ và cổng, bạn có thể thêm các tùy chọn --host--port như sau:

Copy
php artisan reverb:start --host=127.0.0.1 --port=9000

Quá trình khởi động lại máy chủ có thể được thực hiện bằng lệnh:

Copy
php artisan reverb:restart

Tối Ưu Hóa Máy Chủ cho Môi Trường Production

Máy chủ WebSocket cần hoạt động liên tục, vì vậy việc tối ưu hóa là rất quan trọng. Mỗi kết nối WebSocket được giữ trong bộ nhớ cho đến khi có yêu cầu ngắt kết nối. Trên hệ điều hành Unix, tệp sẽ đại diện cho mỗi kết nối. Bạn có thể kiểm tra giới hạn số lượng tệp mở được phép với lệnh:

Copy
ulimit -n

Để nâng giới hạn lên 10.000 cho user forge, bạn cần cập nhật tệp /etc/security/limits.conf như sau:

Copy
# /etc/security/limits.conf
forge        soft  nofile  10000
forge        hard  nofile  10000

Vòng Lặp Sự Kiện

Reverb sử dụng vòng lặp sự kiện của ReactPHP để quản lý kết nối WebSocket. Mặc định, vòng lặp này sử dụng stream_select, nhưng có giới hạn ở 1.024 tệp mở. Nếu bạn có nhu cầu cần hơn 1.000 kết nối, hãy cài đặt các tiện ích mở rộng PHP thông qua PECL:

Copy
pecl install event
# hoặc
pecl install ev
# hoặc
pecl install uv

Máy Chủ Web Nginx

Reverb hoạt động trên cổng không liên quan đến web. Để định tuyến lưu lượng đến Reverb, bạn phải cấu hình máy chủ proxy ngược bằng Nginx, ví dụ:

Copy
server {
    ...
    location / {
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass http://0.0.0.0:8080;
    }
    ...
}

Quản Lý Quy Trình

Sử dụng trình quản lý quy trình như Supervisor là cách tốt nhất để máy chủ Reverb hoạt động liên tục. Bạn cũng nên cấu hình minfds trong supervisor.conf để đảm bảo Supervisor có thể mở đủ tệp cần thiết:

Copy
[supervisord]
... 
minfds=10000

Mở Rộng Quy Mô

Nếu bạn cần phục vụ nhiều kết nối hơn mức cho phép trên một máy chủ, hãy sử dụng khả năng publish/subscribe của Redis để mở rộng Reverb theo chiều ngang. Bạn chỉ cần bật tùy chọn mở rộng trong tệp .env:

Copy
REVERB_SCALING_ENABLED=true

Cấu hình máy chủ Redis để tất cả các máy chủ Reverb có thể giao tiếp. Với việc bật tùy chọn mở rộng và cấu hình Redis, chỉ cần gọi lệnh reverb:start trên nhiều máy chủ.

Kết Luận

Laravel Reverb là một công cụ mạnh mẽ giúp bạn xây dựng ứng dụng thời gian thực dễ dàng và hiệu quả. Với khả năng mở rộng và tích hợp tốt với Laravel, bạn có thể tạo ra những trải nghiệm người dùng mượt mà và nhanh chóng.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào