Memanfaatkan Swoole lewat framework: memahami Hyperf sebagai framework coroutine native, Swoft sebagai pendahulunya, dan Laravel Octane dengan driver Swoole, plus setup proyek pertama di tiap framework.

Setelah di episode 14 kita membangun consumer message broker — pada episode kali ini kita meletakkan semua fondasi manual yang sudah kalian pelajari di atas framework. Menulis server dari nol seperti episode 4-14 adalah latihan terbaik, tetapi di produksi kalian hampir pasti memakai framework: routing, middleware, dependency injection, dan ORM yang sudah jadi.
Mengapa episode ini penting? Karena pilihan framework menentukan produktivitas tim. Swoole punya ekosistem tiga jalur: Hyperf (coroutine native), Swoft (pelopornya), dan Laravel Octane (jalan untuk tim yang sudah Laravel). Memahami perbedaannya membantu kalian memilih yang tepat.
| Framework | Model | Kapan dipilih |
|---|---|---|
| Hyperf | Coroutine-native, dibangun di atas Swoole | Proyek baru yang butuh performa maksimal |
| Swoft | Swoole-native (pendahulu Hyperf) | Proyek legacy Swoft / preferensi annotation |
| Laravel Octane | Laravel + app server (Swoole/OpenSwoole/RoadRunner) | Tim sudah Laravel, ingin pindah tanpa ganti framework |
Hyperf dibangun langsung di atas Swoole — setiap request berjalan dalam coroutine, dan semua komponennya (server, client, pool, timer) adalah warga negara coroutine. Ini pilihan utama untuk proyek Swoole baru.
composer create-project hyperf/hyperf-skeleton hyperf-lab
cd hyperf-lab
php bin/hyperf.php startServer berjalan di 0.0.0.0:9501. Verifikasi:
curl http://127.0.0.1:9501/hyperf-lab/
app/
Controller/ # HTTP controller (berjalan dalam coroutine)
Middleware/ # Middleware PSR-15
Service/ # Layer bisnis
Process/ # Custom process (addProcess ala episode 10)
config/
autoload/
server.php # worker_num, task_worker_num, dll
dependencies.php
bin/hyperf.php # CLI entry<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Hyperf\DbConnection\Db;
#[Controller]
class UserController
{
#[RequestMapping(path: '/users/{id}', methods: ['get'])]
public function show(int $id, RequestInterface $request, ResponseInterface $response)
{
// query berjalan di coroutine + connection pool otomatis
$user = Db::table('users')->find($id);
return $response->json($user);
}
}Perhatikan: Db::table() di Hyperf memakai pool secara otomatis — apa yang kita bangun manual di episode 13 sudah menjadi default framework.
return [
'mode' => SWOOLE_PROCESS,
'servers' => [
[
'name' => 'http',
'host' => '0.0.0.0',
'port' => 9501,
'type' => SWOOLE_HTTP,
],
],
'settings' => [
'worker_num' => swoole_cpu_num(),
'max_request' => 100000,
'task_worker_num' => 8,
'enable_coroutine' => true,
],
];Swoft muncul 2018 sebagai framework Swoole coroutine pertama yang populer. Gayanya berbasis annotation (mirip Spring Boot di Java), dan masih dipakai di banyak codebase legacy. Konsep inti — coroutine, pool, process — identik dengan yang sudah kalian pelajari. Jika bertemu Swoft di pekerjaan kalian, kalian sudah tahu 80% isinya.
Laravel Octane adalah paket resmi Laravel untuk menjalankan aplikasi Laravel di atas app server (Swoole, RoadRunner, FrankenPHP). Setup-nya:
composer require laravel/octane
php artisan octane:install --server=swooleMenjalankan server:
php artisan octane:start --host=127.0.0.1 --port=8000Octane membawa aplikasi Laravel hidup terus — bootstrap sekali, tidak per-request. Konsekuensi yang harus dipahami:
| Perilaku | FPM | Octane |
|---|---|---|
| Bootstrap aplikasi | Tiap request | Sekali di awal |
| Static properties / service container | Reset tiap request | Bertahan — wajib di-reset manual |
| Memory leak | Hilang tiap request | Menumpuk — perlu dijaga |
Warning
Bahaya terbesar migrasi ke Octane adalah state yang tidak sengaja bertahan: static properties, closure yang menangkap data request, dan koneksi DB/Redis yang tidak ditutup. Octane menyediakan hook Octane::tick() dan $app->flush() per-request, dan ada paket laravel/octane + laravel/horizon yang wajib disesuaikan. Jangan asal pindah — audit dulu kode global state-nya.
Octane punya fitur warm-up: menjalankan kode sekali saat worker lahir, sehingga request pertama tidak lambat:
// config/octane.php
'warm' => [
// komponen yang dimuat sekali di tiap worker
\App\Models\User::class,
],Panduan cepat:
| Masalah | Penyebab | Solusi |
|---|---|---|
| 502 timeout setelah migrasi Octane | max_execution_time / pool kecil | Set max_request besar, sesuaikan worker_num |
| Data bocor antar request (Hyperf) | Static property di controller | Jangan pakai static untuk state request |
| Hyperf tidak jalan, port bentrok | Server Hyperf lama masih berjalan | php bin/hyperf.php berhenti / pkill -f hyperf.php |
| Octane memory naik terus | Koneksi/library tidak di-reset per request | Gunakan hook flush, tutup resource di terminating |
Pada episode 15 ini, kalian telah memetakan ekosistem framework Swoole.
Inti yang harus dibawa pulang:
Di episode 16 selanjutnya, kita masuk ke arsitektur microservices: gRPC & JSON-RPC — membangun service gRPC dengan Swoole, JSON-RPC, dan service discovery. Sampai jumpa di episode 16!