Belajar RoadRunner - Custom Plugins & Velox
Episode 23 of 26

Belajar RoadRunner - Custom Plugins & Velox

Membangun binary RoadRunner kustom dengan Velox: memahami struktur plugin Go, menulis plugin sederhana, menyusun config velox.yaml, dan memanggil plugin kustom dari PHP lewat RPC untuk menambah kemampuan di luar plugin bawaan.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 22 kita menskalakan RoadRunner, pada episode kali ini kita membuka kotak terakhir: custom plugins & Velox. RoadRunner bukan sekadar kumpulan plugin bawaan — arsitekturnya memungkinkan kalian menulis plugin dalam Go, mengkompilasinya ke binary kustom, dan memanggilnya dari PHP via RPC. Ini kekuatan yang jarang ada di app server lain.

Mengapa episode ini penting? Karena beberapa kebutuhan tidak tercakup plugin bawaan: integrasi ke service internal, logika jaringan yang sangat cepat, atau sinkronisasi dengan sistem lain. Dengan Velox, kalian menambah kemampuan Go ke RoadRunner tanpa menulis ulang PHP.

Apa Itu Velox

Velox adalah tool dari tim RoadRunner untuk membangun binary kustom. Ia mengambil binary rr standar dan menggabungkannya dengan plugin tambahan yang kalian tulis (atau plugin komunitas). Hasilnya satu binary yang bisa dijalankan seperti biasa:

100%

Persyaratan: Go toolchain terinstall (RoadRunner v2025.1.x memakai Go 1.26.x) — kalian hanya butuh Go untuk membangun; saat jalan, binary tetap single-file.

Plugin RoadRunner adalah package Go yang mengimplementasikan interface plugin. Contoh plugin yang menyediakan method RPC app.Ping:

plugin/ping.go
package ping
 
import (
    "fmt"
    "time"
 
    "github.com/roadrunner-server/api/v4/plugin/v4"
    "github.com/roadrunner-server/endure/v2"
    "github.com/roadrunner-server/endure/v2/container"
    "github.com/roadrunner-server/endure/v2/dep"
)
 
const Name = "ping"
 
type Plugin struct {
    startedAt time.Time
}
 
func (p *Plugin) Init() error {
    p.startedAt = time.Now()
    return nil
}
 
func (p *Plugin) Serve() chan error {
    ch := make(chan error, 1)
    return ch
}
 
func (p *Plugin) Stop() error {
    return nil
}
 
func (p *Plugin) Name() string {
    return Name
}
 
func (p *Plugin) Ping(payload []byte) ([]byte, error) {
    return []byte(fmt.Sprintf("pong at %s", p.startedAt)), nil
}

Init/Serve/Stop adalah siklus hidup plugin; method Ping menjadi RPC ping.Ping yang bisa dipanggil PHP. Kerangka lengkap plugin ada di repository roadrunner-server/endure — ini cukup untuk memahami polanya.

Note

Menulis plugin Go menuntut pemahaman Go dan model plugin RoadRunner (berbasis endure dependency-injection container). Untuk kebanyakan proyek, pakai plugin komunitas yang sudah jadi; tulis plugin sendiri hanya saat kebutuhan benar-benar tidak tercakup.

Config Velox

velox.yaml mendefinisikan binary kustom dan daftar plugin:

velox.yaml
version: "2"
 
build:
  output: rr-custom
  command: "php app.php"
 
plugins:
  - name: ping
    module: "github.com/username/myplugins/ping"
    version: "v0.1.0"
  - name: custom-http
    module: "github.com/roadrunner-server/http"
    version: "v4.x"
KeyFungsi
versionFormat config Velox ("2")
build.outputNama binary hasil build
build.commandCommand default yang dipakai server.command (opsional)
pluginsDaftar plugin: nama, module Go, dan versi

Build Binary Kustom

Install Velox dan jalankan build:

Install dan jalankan Velox
go install github.com/roadrunner-server/velox/v2@latest
velox -c velox.yaml
./rr-custom --version

Hasilnya binary rr-custom berisi plugin bawaan plus plugin ping. Verifikasi plugin terdaftar:

Cek plugin yang dimuat
./rr-custom list

Mengaktifkan Plugin di .rr.yaml

Plugin kustom diaktifkan seperti plugin lainnya — dengan blok config (episode 3):

Aktifkan plugin kustom
ping:
  # blok config plugin, bila ada
server:
  command: "php app.php"

Jika plugin memerlukan config, tambahkan bloknya. Setelah itu, plugin aktif dan method RPC-nya tersedia.

Memanggil Plugin Kustom dari PHP

Panggil method RPC plugin kustom memakai pola dari episode 7:

Panggil plugin kustom dari PHP
use Spiral\Goridge\RPC\RPC;
 
$rpc = RPC::create('tcp://127.0.0.1:6001');
$result = $rpc->call('ping.Ping', 'halo dari PHP');
 
echo $result; // "pong at ..."

Ini membuka pola menarik: logika berkinerja kritis (misal parsing, enkripsi, agregasi) bisa ditulis dalam Go dan dipanggil PHP — dua bahasa, satu aplikasi.

Kapan Memakai Binary Kustom

SituasiRekomendasi
Hanya butuh plugin bawaanBinary resmi — tanpa Velox
Plugin komunitas tersediaBinary resmi + konfigurasi
Kebutuhan Go spesifikVelox + plugin kustom
Ingin binary lebih kecilVelox dengan subset plugin

Ingat trade-off: binary kustom harus dibangun ulang saat upgrade (episode 18) — proses build perlu masuk pipeline CI, bukan sekali jalan.

Penutup

Pada episode 23 ini, kalian telah belajar menambah kemampuan Go ke RoadRunner.

Inti yang harus dibawa pulang:

  • Velox membangun binary kustom dari plugin Go tambahan.
  • Plugin mengimplementasikan siklus hidup Init/Serve/Stop; method-nya jadi RPC.
  • velox.yaml mendaftarkan module dan versi plugin.
  • Plugin kustom diaktifkan lewat blok config di .rr.yaml.
  • Panggil dari PHP via RPC — pola dua-bahasa dalam satu aplikasi.

Di episode 24 selanjutnya, kita belajar ekosistem & tren modern 2026 — posisi RoadRunner v2025.1.x di antara Spiral, Laravel Octane, Symfony, FrankenPHP, Swoole, dan OpenSwoole, plus tren keamanan toolchain Go dan PHP 8.4/8.5. Sampai jumpa di episode 24!

Belajar RoadRunner - Custom Plugins & Velox | Belajar RoadRunner