Swoole Kurulum ve Laravel

Herkese Merhaba bu yazımızda sizlere Swoole anlatmaya çalışacağım. Daha önce duymamış olabilirsiniz hiç önemli değil okumayı bitirdiğinizde tam olarak neler olduğunu anlayacaksınız. Hadi Başlayalım!
Öncelikle Nedir bu Swoole ?
Swoole PHP için geliştirilmiş C ve C++ ile yazılmış Eşzamansız, Olay Odaklı Coroutine tabanlı bir eş zamanlı ağ iletişim motorudur. Açıklamalara çok takılmadan PHP için yeni bir dönem diyebiliriz. Bu makalede Laravel üzerinde ki kullanıma odaklanacağız.
Sistem Gereksinimleri
- İşletim Sistemi : Linux*, FreeBSD, MacOS
- Linux Kernel Versiyon ≥ 2.3.32
- PHP Versiyon ≥ 5.3.10
- GCC version ≥ 4.4
- Cmake Versiyon ≥ 2.4**
* CentOS 6.2+ | Ubuntu 12+ | Debian 6+
** Cmake Swoole Kütüphanesinin C/C++ derlenebilmesi için gereklidir.
Önerilen Ortamlar ise Ubuntu için ≥ 14 , CentOS ≥ 7 sürümüdür.
Kurulum
Swoole için kurulumu Pecl üzerinden yapabiliyoruz. Şöyle;
#!/bin/bash
pecl install swoole
Bu sayede sistemimiz üzerine Swoole kütüphanesinin kurulmasını sağlamış oluyoruz. Manuel olarak kurmak istersek ise Şöyle;
#!/bin/bash
cd /tmp
wget https://github.com/swoole/swoole-src/archive/v4.4.16.zip
cd swoole
phpize
./configure
make
swoole/module/swoole.so
sudo make install
Bunların ardından sistemimizde artık kütüphane eklenmiş oldu. Fakat aktif etmedik şimdi ise aktifleştirme işlemini yapalım.
php -i | grep php.ini
sudo echo "extension=swoole.so" >> php.ini
php -m | grep swoole
Yukarıda ki blog aslında bizim php.ini dosyamızın içerisine Swoole için bir tanımlama yapıyor. Php.ini dosyanıza giderekte bunu kontrol edebilirsiniz.
Tüm bunların ardından artık Swoole kullanmaya hazır. Fakat biz Laravel üzerinde ki kullanımından bahsedeceğimiz için yapmamız gereken birkaç adım daha var hızlıca onlardan da konuşalım.
Laravel ve Swoole
Buraya kadar geldiğinize göre Laravel Proje oluşturmaktan bahsetmeyeceğim. Projenizin olduğu dizinde tekbir değişiklik ile kolayca eklenebilir olduğunu göreceksiniz. Hadi ekleyelim;
composer require swooletw/laravel-swoole
Composer üzerinden swooletw/laravel-swoole paketini projemize eklemek ile başlıyoruz ardından | /config/app.php dosyamıza gidiyoruz ve providers kısmına Servis sınıfımızı ekliyoruz.
#config/app.php[
'providers' =>
[
SwooleTW\Http\LaravelServiceProvider::class,
],
]
Böylelikle Laravel Projemize Swoole eklemiş olduk. Şimdi ise Projemizi çalıştıralım ve testlerimizi yapalım. Artisan CLI üzerinden şu kodu çalıştırıyoruz.
php artisan swoole:http start
Şu mesajı alıyorsak projemiz çalışıyor demektir.
Starting swoole http server... Swoole http server started: <http://127.0.0.1:1215>
Şimdi birkaç ayar yapabiliriz. Öncelikli olarak şu 1215 portu yerine 80 portunda çalıştıralım. Kurulumun ardından Config Klasörümüzün içerisinde swoole_http.php dosyamız oluştu tüm Swoole ile ilgili ayarlarımız burada şimdilik sadece
'port' => env('SWOOLE_HTTP_PORT', '1215') yerine
'port' => env('SWOOLE_HTTP_PORT', '80'),
diyebiliriz. Tabii ki bu çok doğru bir yöntem değil doğrudan .env dosyamıza şu anahtarı ekleyip tekrar çalıştırıyoruz.
#! /.env
SWOOLE_HTTP_PORT=80#!/bin/bash
php artisan optimize:clear
...
php artisan swoole:http start
ardından artık projemiz 80 portumuz üzerinden yayın yapmaya başladı. Artık bir benchmark testi yapabiliriz. Örnek çıktıları sizler ile paylaşıyorum. Kendi testlerimi henüz yazıyorum daha sonra kapsamlı olarak buradan başka bir makalede onlarıda paylaşacağım. Sizlerde yorumlarda sonuçlarınızı ve test koşullarınızı paylaşırsanız daha çok fikire sahip olabilir. Şimdiden teşekkürler.
#! Nginx - PHP-FPM
Running 10s test @ http://127.0.0.1
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.14s 191.03ms 1.40s 90.31%
Req/Sec 22.65 10.65 50.00 65.31%
815 requests in 10.07s, 223.65KB read Requests/sec: 80.93 Transfer/sec: 22.21KB
#! Swoole HTTP ServerRunning 10s test @ http://127.0.0.1
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 11.58ms 4.74ms 68.73ms 81.63%
Req/Sec 2.19k 357.43 2.90k 69.50%
87879 requests in 10.08s, 15.67MB read Requests/sec: 8717.00 Transfer/sec: 1.55MB
Kaynaklar :
https://github.com/swooletw/laravel-swoole
https://www.swoole.co.uk
Tolga Karabulut
tolga.karabulut@medianova.com
Medianova CDN | Senior PHP Developer