ServBay'de Swoole ile Yüksek Performanslı PHP Uygulamaları Geliştirme
ServBay, geliştiriciler için özel olarak tasarlanmış bir yerel web geliştirme ortamıdır. Birçok programlama dili, veritabanı ve aracı önceden entegre olarak sunar ve yerel geliştirme süreçlerini kolaylaştırmayı hedefler. Bu makalede, ServBay ortamında Swoole uzantısı kullanarak PHP uygulamalarınıza nasıl güç katabileceğinizi ve yüksek performanslı ağ servisleri kurabileceğinizi anlatacağız.
Swoole Nedir?
Swoole, PHP için tasarlanmış, korutin (Coroutine) tabanlı, paralel ve yüksek performanslı bir ağ iletişim motorudur. Tamamen C diliyle yazılmıştır ve PHP'ye asenkron, paralel ve korutin destekli ağ iletişimi yetenekleri kazandırır. Swoole sayesinde, PHP geliştiricileri geleneksel web sunucusu (örn: Apache/Nginx + PHP-FPM) tabanlı istek-cevap modelinin sınırlamalarının ötesine geçerek, yüksek eşzamanlılık gerektiren görevleri çok daha verimli bir şekilde işleyebilir. Bu sayede, sürekli hafızada çalışan web sunucuları, asenkron görev yönetimi, gerçek zamanlı iletişim servisleri (örn: WebSocket) gibi modern uygulamalar oluşturmak mümkündür.
Swoole'un Temel Özellikleri:
- Yüksek Performans: Alt yapısı C diliyle geliştirilmiştir; asenkron I/O, çoklu işlem/çoklu iş parçacığı desteği sunar.
- Korutinler: Hafif korutinler ile senkron kodun asenkron şekilde çalışmasını sağlar ve asenkron programlamayı kolaylaştırır.
- Zengin Protokol Desteği: Yerleşik olarak TCP/UDP/HTTP/WebSocket gibi birçok ağ protokolünü destekler.
- Kullanım Kolaylığı: PHP alışkanlıklarıyla uyumlu, sade bir API sunar.
- Sürekli Hafızada Çalışma: Uygulamarınız süreç boyunca bellekte çalışır ve geleneksel PHP'nin her istek için ortamı yeniden başlatma yükünden kurtulursunuz.
Swoole sayesinde PHP yalnızca web geliştirme için bir betik dili olmaktan çıkar ve çok daha çeşitli, yüksek performans gerektiren ağ uygulamalarında kullanılabilir.
ServBay'de Swoole Nasıl Etkinleştirilir?
ServBay’in en önemli hedeflerinden biri, geliştiricilere farklı PHP uzantılarını kolayca yönetme ve kullanma imkânı sunmaktır. Yüksek performanslı modern PHP geliştirme için kilit bir uzantı olan Swoole, ServBay’e önceden dâhil edilmiştir. Tek yapmanız gereken, birkaç adımı takip ederek etkinleştirmektir.
Gereksinimler:
- ServBay kurulmuş ve çalıştırılmış olmalı.
- ServBay içinde en az bir PHP sürümü yüklü olmalı.
Etkinleştirme Adımları:
- ServBay uygulama arayüzünü açın.
- “Paketler (Packages)” veya PHP sürüm yönetimi ekranına gidin. (Not: ServBay sürümüne bağlı olarak giriş adı değişebilir, genellikle ana ekranda veya Ayarlar menüsünde bulunur.)
- Swoole’u etkinleştirmek istediğiniz PHP sürümünü seçin.
- Swoole uzantısı seçeneğini bularak etkinleştirin. ServBay genellikle derlenmiş uzantıları bir liste veya anahtar şeklinde sunar.
- Değişiklikleri kaydedin ve uyarı üzerine ServBay ya da ilgili PHP servislerini yeniden başlatın. ServBay, PHP ortamını Swoole uzantısı ile otomatik olarak yapılandıracaktır.
Bu adımları tamamladıktan sonra, seçtiğiniz PHP sürümünde Swoole’u kullanmaya başlayabilirsiniz. Komut satırında php -m
çalıştırarak swoole
eklentisinin yüklü modüller arasında olup olmadığını kontrol edebilirsiniz.
TIP
ServBay, sitelerinizi ve proje dosyalarınızı varsayılan olarak /Applications/ServBay/www
dizinine kaydetmenizi önerir. Bu, ServBay’in site yönetimi ve yapılandırması için en uygun yoldur. Bu makaledeki örneklerde de bu yolu takip edeceğiz.
Basit Bir Swoole HTTP Sunucusu Kurmak
Şimdi temel bir Swoole HTTP sunucusu oluşturalım ve web isteklerini nasıl işleyeceğini gösterelim.
Adım 1: Proje Dizini Oluşturun
Terminali açarak yeni bir proje klasörü oluşturun ve içine girin. ServBay’in önerisini takip ederek /Applications/ServBay/www
altında işlem yapacağız:
cd /Applications/ServBay/www
mkdir servbay-swoole-http
cd servbay-swoole-http
2
3
Adım 2: Sunucu Scriptini Hazırlayın
servbay-swoole-http
dizininde server.php
adlı bir dosya oluşturun ve aşağıdaki kodları ekleyin:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
// Swoole HTTP sunucu örneği oluşturuluyor
// Tüm ağ arayüzlerinde (0.0.0.0) 9501 portunu dinle
$server = new Server("0.0.0.0", 9501);
// 'start' adlı olay için geri çağırma fonksiyonu kaydediliyor
// Sunucu başarıyla başladığında tetiklenir
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
// Burada ana işlem ID’si, yönetici işlem ID’si gibi bilgileri kaydedebilirsiniz
});
// 'request' olayına geri çağırma fonksiyonu kaydet
// Yeni bir HTTP isteği alındığında tetiklenir
$server->on("request", function (Request $request, Response $response) {
// Yanıt başlığını ayarla
$response->header("Content-Type", "text/plain");
// İstek yolu veya parametresine göre işlem yap
$path = $request->server['request_uri'] ?? '/';
$content = "Hello ServBay!";
if ($path === '/info') {
$content = "Request path: " . $path . "\n";
$content .= "Method: " . $request->server['request_method'] . "\n";
$content .= "Client IP: " . $request->server['remote_addr'] . "\n";
// Daha fazla istek bilgisini $request üzerinden alabilirsiniz
}
// Yanıtı gönder ve isteği bitir
$response->end($content);
});
// Sunucuyu başlat
$server->start();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Bu script, 9501 portunda dinleyen bir Swoole HTTP sunucusu oluşturur. Gelen isteklerde “Hello ServBay!” metin yanıtı döner. Eğer /info
yoluna erişilirse, gelen isteğe ait bazı bilgiler ekrana yazılır.
Adım 3: Swoole Sunucusunu Çalıştırın
Terminalde hâlâ servbay-swoole-http
klasöründeyseniz, Swoole uzantısı etkin PHP sürümü ile scripti başlatın:
php server.php
Her şey yolundaysa, terminalde aşağıdaki gibi bir çıktı görürsünüz:
Swoole HTTP server is started at http://0.0.0.0:9501
Bu, Swoole HTTP sunucusunun arka planda çalıştığı ve 9501 portunu dinlediği anlamına gelir.
Adım 4: Swoole Sunucusuna Erişin
Web tarayıcınızı açarak aşağıdaki adresleri ziyaret edin:
http://localhost:9501
http://localhost:9501/info
İlkinde Hello ServBay!
, ikincisinde ise isteğe ait bazı ek bilgiler göreceksiniz.
Sunucuyu durdurmak için scripti çalıştırdığınız terminal penceresinde Ctrl + C
tuşlarına basın.
Swoole ile WebSocket Bağlantılarını Yönetin
Swoole, WebSocket protokolünü yerel olarak destekler ve gerçek zamanlı sohbet uygulamaları, oyun sunucuları veya anlık veri iletimi gerektiren projeler için idealdir.
Adım 1: WebSocket Sunucu Scripti Oluşturun
/Applications/ServBay/www/servbay-swoole-http
dizininde (veya isterseniz yeni bir servbay-swoole-websocket
dizini oluşturup orada), websocket_server.php
adında bir dosya oluşturup, şu kodları ekleyin:
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
// Swoole WebSocket sunucusu oluşturuluyor
// WebSocket sunucuları HTTP sunucusunun alt sınıfıdır, HTTP isteklerini de işleyebilirler
$server = new Server("0.0.0.0", 9502); // 9502 portunu dinle
// 'start' olayı, sunucu başladığında tetiklenir
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server is started at ws://0.0.0.0:9502\n";
});
// 'open' olayı
// Yeni bir WebSocket bağlantısı kurulduğunda tetiklenir
// $request nesnesi, istemci bağlantı bilgilerini içerir, örn: $request->fd dosya tanımlayıcısıdır
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
// İstemciye hoş geldin mesajı gönderilebilir
$server->push($request->fd, "Welcome to ServBay WebSocket Demo!");
});
// 'message' olayı
// Sunucu, istemciden WebSocket mesajı aldığında tetiklenir
// $frame, mesaj ve gönderen istemciyle ilgili bilgileri içerir, örn: $frame->data ve $frame->fd
$server->on("message", function (Server $server, Frame $frame) {
echo "received message from {$frame->fd}: {$frame->data}\n";
// Mesajı doğrudan gönderen istemciye ilet
$server->push($frame->fd, "Hello, you sent: {$frame->data}");
// Yayın örneği (tüm bağlantılar için uygulama, bağlantı listesi tutmak gerekir)
// foreach ($server->connections as $fd) {
// if ($fd != $frame->fd) { // Gönderen istemci hariç
// $server->push($fd, "User {$frame->fd} says: {$frame->data}");
// }
// }
});
// 'close' olayı
// Bir istemci bağlantısı kapandığında tetiklenir
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
// Sunucuyu başlat
$server->start();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Bu kod, 9502 portunda dinleyen bir Swoole WebSocket sunucusu kurar ve başlıca olaylara uygun fonksiyonlar tanımlar: start
(başlatıldı), open
(bağlantı açıldı), message
(mesaj alındı), close
(bağlantı kapandı). message
anında sunucu, alınan mesajı bir ön ekle birlikte doğrudan gönderen istemciye yanıt olarak iletir.
Adım 2: WebSocket Sunucusunu Çalıştırın
Terminalde scriptin bulunduğu klasörde olduğunuzdan emin olun ve Swoole etkin PHP’yi kullanarak çalıştırın:
php websocket_server.php
Her şey yolundaysa terminalde şunu göreceksiniz:
Swoole WebSocket server is started at ws://0.0.0.0:9502
Bu, artık Swoole WebSocket sunucusunun arkaplanda çalıştığı ve 9502 portunu dinlediği anlamına gelir.
Adım 3: WebSocket Sunucusuna Bağlanın
Bu WebSocket sunucusuna test etmek için birkaç yöntemi kullanabilirsiniz.
Yöntem A: Tarayıcı Geliştirici Araçlarıyla
Çoğu modern tarayıcıda (F12 ile açabilirsiniz) “Ağ (Network)” veya “Konsol (Console)” paneli üzerinden WebSocket bağlantıları test edilebilir.
Herhangi bir web sayfasını (örn.
about:blank
) açın.Geliştirici araçlarını açıp “Console” paneline geçin.
Bağlantı kurmak için aşağıdaki JavaScript kodunu yazıp çalıştırın:
javascriptvar ws = new WebSocket("ws://localhost:9502"); ws.onopen = function(event) { console.log("WebSocket connection opened:", event); ws.send("Hello from Browser!"); // Bağlantı açıldığında mesaj gönder }; ws.onmessage = function(event) { console.log("Message from server:", event.data); // Gelen mesajı göster }; ws.onerror = function(event) { console.error("WebSocket error:", event); // Hata oluşursa }; ws.onclose = function(event) { console.log("WebSocket connection closed:", event); // Bağlantı kapanınca }; // ws.send("mesajınız") ile mesaj gönderebilir, // ws.close() ile bağlantıyı kapatabilirsiniz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Kodu çalıştırdığınızda çıktıları inceleyin. Ayrıca,
websocket_server.php
çalışan terminalde de bağlantı ve mesajla ilgili loglar görebilirsiniz.
Yöntem B: wscat
Komut Satırı Aracıyla
wscat
, Node.js tabanlı pratik bir komut satırı WebSocket istemcisi aracıdır.
wscat
’i yükleyin: Eğer Node.js ve npm kurulu değilse, önce onları yükleyin. Ardından, npm ilewscat
’i yükleyin:bashnpm install -g wscat
1WebSocket sunucusuna bağlanın: Terminalde şu komutu çalıştırın:
bashwscat -c ws://localhost:9502
1Başarılı bağlantı sonrası
>
şeklinde bir istemci göreceksiniz.Mesaj gönderin: Girintiden sonra istediğiniz mesajı yazıp Enter’a basın:
bash> Hello ServBay via wscat
1Sunucu yanıt gönderdiğinde,
wscat
terminalinizde genellikle<
ile başlayan cevap görünür:bash< Hello, you sent: Hello ServBay via wscat
1Aynı zamanda,
websocket_server.php
çalışan konsolda da loglar oluşur.
wscat
bağlantısını kesmek için Ctrl + C
tuşlarına basabilirsiniz.
Dikkat Edilmesi Gerekenler
- Port Çakışmaları: Swoole sunucusunun (örn: 9501, 9502) kullandığı portların sistemde başka bir uygulama tarafından kullanılmadığından emin olun. Çakışma olursa Swoole başlatılamaz.
- PHP Sürümü: Scriptleri terminalden çalıştırırken, Swoole uzantısı etkin olan ServBay PHP sürümünü kullandığınıza emin olun. Bunu
php -v
ile kontrol edebilirsiniz. ServBay genellikle PHP sürümlerini komut satırında kolayca değiştirmenizi sağlayan araçlar sunar. - Uzantı Durumu: Eğer sunucu başlatılamıyorsa, kullandığınız PHP sürümünde Swoole uzantısının gerçekten etkin olup olmadığını ve ServBay/PHP servisinin yeniden başlatılmış olduğunu tekrar kontrol edin.
- Arka Planda Sürekli Çalışan Süreçler: Swoole sunucusu bellekte sürekli çalışan bir süreçtir. Üretim ortamında, Supervisor, Systemd, pm2 gibi araçlarla süreçlerin beklenmedik bir şekilde kapanması durumunda otomatik başlatılmasını sağlamalısınız. Yerel geliştirme sırasında ise terminalden manuel çalıştırmak genellikle yeterlidir.
Sonuç
ServBay sayesinde, Swoole uzantısını kolayca etkinleştirip kullanarak, yerel geliştirme ortamınızda klasik HTTP servislerinden modern WebSocket gerçek zamanlı iletişim uygulamalarına kadar yüksek performanslı PHP projeleri geliştirebilirsiniz. Swoole'un güçlü özellikleri ile ServBay'in sunduğu pratik geliştirme imkanları birleştiğinde PHP geliştiricileri için yeni kapılar açılır. Daha verimli ve güçlü uygulamalar oluşturmak için hemen ServBay üzerinde Swoole’u deneyin!