솔직히 그동안에는 같은 작업들만 반복해서 다른 기술들을 익힐 경험이 적었는데, 최근데 다양한 정보들을 받아들여 나한테 어떤게 부족한지 절실히 느끼고 있는 요즘이당..
octane이란거 자체를 오늘 처음 알았는데, Swoole를 이용하여 라라벨 프레임워크의 성능을 높히기 위해 개발된 최신 버전이라고 한다.
https://laravel.com/docs/10.x/octane#main-content
composer로 octane을 확장시키고, swoole를 pecl로 따로 받아야 되는 것 같다.
Swoole는 멀티 프로세스 / 멀티 스레드를 지원하고 비동기 I/O를 지원한다.
기존 개발된 Laravel FrameWork에서 특정 부분을 Octane으로 리팩토링 하여 작업하는 편이 속도 개선에 도움이 될 것 같다. (모든 부분을 기존과 동일하게 처리가 불가)
라이브 스트리밍, 웹 소켓, 실시간 채팅, 대규모 트래픽 처리 같은 경우에 Octane을 사용하는 편이 유리하게 적용 될 수 있을 것 같다. 또, 큐로 작업하는 부분들 (푸시의 경우)에도 몇만건을 동시에 날리면 시간차가 발생하였었는데 이 때에도 적용하면 빠르게 처리가 가능 할 것으로 보인다.
해당 방식의 예제를 뽑아봤다..
config/queue.php 안에서 connections에 설정값 추가
'fcm' => [
'driver' => 'redis', // Queue 드라이버 설정
'connection' => 'default', // Redis 연결 설정
'queue' => 'fcm', // Queue 이름 설정
'retry_after' => 90, // 재시도 간격 설정
],
2. FCM 발송 job Class 처리
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Laravel\Octane\Facades\Octane;
class SendFCMJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function handle()
{
Octane::dispatch(function () {
// FCM 발송 처리
// $this->data 배열을 이용하여 FCM 발송
});
}
}
3. Controller
<?php
namespace App\Http\Controllers;
use App\Jobs\SendFCMJob;
use Illuminate\Http\Request;
class SendFCMController extends Controller
{
public function send(Request $request)
{
$data = $request->all();
// $data 배열을 이용하여 FCM 발송
SendFCMJob::dispatch($data)->onConnection('fcm')->onQueue('fcm');
}
}
4. 라우트
Route::post('/send-fcm', [SendFCMController::class, 'send']);
주기적인 발송이면 스케줄러를 이용하면 될 것 같다.
기회가 되면 제대로 사용 해 봐야겠다..
대용량 트래픽을 처리 할 기회가 없어서 문제지만 ㅎㅎ..
'PHP > PHP' 카테고리의 다른 글
[Laravel] XSS Protect Middleware 구축 ( + CSRF 보호에 대한 주저리..) (0) | 2023.04.27 |
---|---|
Laravel Sanctum과 Passport 차이, Passport의 인증방식들 정리 (0) | 2023.04.05 |
Laravel - passport를 이용한 로그인 구현 (Oauth) (2) | 2022.05.03 |
[Laravel] Laravel + Vue 연동 (0) | 2020.12.15 |
[Laravel] AWS S3 연동하기 및 파일 업로드 구현 (0) | 2019.12.11 |