ServBay'de Swoole ile Yüksek Performanslı PHP Uygulamalarının Geliştirilmesi
ServBay, geliştiriciler için tasarlanmış, birçok dil ortamı, veritabanı ve aracı önceden entegre eden, yerel web geliştirme sürecini kolaylaştırmayı amaçlayan bir platformdur. Bu makalede, ServBay ortamında Swoole uzantısını kullanarak PHP uygulamalarına nasıl güç katabileceğinizi ve yüksek performanslı ağ servisleri oluşturabileceğinizi anlatıyoruz.
Swoole Nedir?
Swoole, PHP için tasarlanmış korotin (Coroutine) temelli, paralel ve yüksek performanslı bir ağ iletişim motorudur. Tamamen C diliyle yazılmış olan Swoole, PHP'ye asenkron, paralel ve korotin tabanlı ağ iletişimi özellikleri sunar. Swoole sayesinde, PHP geliştiricileri geleneksel web sunucularının (örn. Apache/Nginx + PHP-FPM) klasik istek-yanıt modelinin sınırlarından kurtularak yüksek eşzamanlı görevleri daha verimli şekilde işleyebilirler. Swoole, kalıcı bellekli web sunucuları, asenkron görevler ve gerçek zamanlı iletişim hizmetleri (örn. WebSocket) gibi gelişmiş uygulamalar inşa etmek için idealdir.
Swoole'un Başlıca Özellikleri:
- Yüksek Performans: Altta C diliyle geliştirilmiş, asenkron I/O ve çoklu süreç/çoklu iş parçacığı desteği sağlar.
- Korotinler: Hafif korotinler ile senkron kodda asenkron yürütme, karmaşık asenkron mantıkları kolayca kodlamanızı mümkün kılar.
- Zengin Protokol Desteği: TCP, UDP, HTTP, WebSocket ve daha birçok ağ protokolünü yerel olarak destekler.
- Kullanım Kolaylığı: PHP'ye özgü kolay ve anlaşılır bir API sunar.
- Kalıcı Bellek: Uygulamalar, kalıcı süreçler olarak çalışır; geleneksel PHP uygulamalarında her istekte oluşan ortam başlatma yükünü ortadan kaldırır.
Swoole sayesinde PHP, yalnızca web sayfaları için kullanılan bir betik dilinin ötesine geçer ve çok daha geniş yüksek performanslı ağ uygulamaları için kullanılabilir hale gelir.
ServBay'de Swoole Uzantısını Aktif Etme
ServBay'in ana hedeflerinden biri, geliştiricilere PHP uzantılarını kolayca yönetip kullanabilme imkânı sunmaktır. Swoole, modern PHP geliştirme için kritik bir uzantı olduğundan ServBay'e önceden yüklenmiştir. Aktif etmek için yalnızca birkaç adım gerekir.
Ön Koşullar:
- ServBay yüklü ve çalışıyor olmalı.
- ServBay'de en az bir PHP sürümü kurulu olmalı.
Aktivasyon Adımları:
- ServBay uygulama arayüzünü açın.
- “Paketler” (Packages) veya PHP versiyon yönetimi arayüzüne gidin. (Not: Arayüz ismi ServBay sürümüne göre değişebilir, genellikle ana ekranda veya ayarlarda bulunur.)
- Swoole'u aktifleştirmek istediğiniz PHP sürümünü seçin.
- Swoole uzantısı seçeneğini bulun ve aktif edin. ServBay genellikle derlenmiş uzantıları bir liste veya anahtar şeklinde gösterir.
- Değişiklikleri kaydedin ve ServBay veya ilgili PHP servisini yeniden başlatın. ServBay, Swoole uzantısını PHP ortamına otomatik olarak yükler.
Adımları tamamladıktan sonra, seçtiğiniz PHP sürümünde Swoole'u kullanmaya başlayabilirsiniz. Komut satırında php -m
komutunu çalıştırarak swoole
uzantısının yüklü olup olmadığını kontrol edebilirsiniz.
TIP
ServBay, sitelerinizi ve proje dosyalarınızı varsayılan olarak aşağıdaki dizinlerde saklamanızı önerir; bu sayede site yönetimi ve konfigürasyon kolaylaşır:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Makaledeki örneklerde de bu klasörler kullanılacaktır.
Basit Bir Swoole HTTP Sunucusu Oluşturma
Şimdi, web isteklerini nasıl işlediğimizi göstermek için temel bir Swoole HTTP sunucusu oluşturacağız.
Adım 1: Proje Dizinini Oluşturun
Terminali açarak, yeni bir proje klasörü oluşturup içine girin. ServBay'in önerdiği dizini kullanalım:
macOS:
bash
cd /Applications/ServBay/www
mkdir servbay-swoole-http
cd servbay-swoole-http
1
2
3
2
3
Windows:
cmd
cd C:\ServBay\www
mkdir servbay-swoole-http
cd servbay-swoole-http
1
2
3
2
3
Adım 2: Sunucu Betiğini Yazın
servbay-swoole-http
klasöründe server.php
isimli bir dosya oluşturup aşağıdaki içeriği ekleyin:
php
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
// Swoole HTTP sunucu örneği oluştur
// Tüm ağ arabirimlerini (0.0.0.0) 9501 portundan dinle
$server = new Server("0.0.0.0", 9501);
// 'start' olayını kaydet
// Sunucu başarıyla başlatıldığında tetiklenir
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
// Buraya ana süreç ID'si, yönetim süreç ID'si gibi bilgiler kaydedilebilir
});
// 'request' olayını kaydet
// Yeni HTTP isteği geldiğinde tetiklenir
$server->on("request", function (Request $request, Response $response) {
// Yanıt başlığını ayarla
$response->header("Content-Type", "text/plain");
// İstek yoluna veya parametrelere göre iş mantığı uygula
$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 bilgisi $request nesnesinden alınabilir
}
// Yanıt gövdesini gönder ve isteği sonlandır
$response->end($content);
});
// Sunucuyu başlat
$server->start();
1
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
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 betik, 9501 portundan dinleyen bir Swoole HTTP sunucusu oluşturur. Bir istek geldiğinde, "Hello ServBay!" metni döner. /info
yoluna erişildiğinde ise istek bilgilerini içeren metin gönderir.
Adım 3: Swoole Sunucusunu Çalıştırın
Terminalde, dizininiz servbay-swoole-http
olduğundan emin olun. ServBay'de Swoole'un etkin olduğu PHP sürümüyle betiği çalıştırın:
bash
php server.php
1
Her şey doğruysa, terminalde aşağıdaki çıktıyı görürsünüz:
bash
Swoole HTTP server is started at http://0.0.0.0:9501
1
Bu, Swoole HTTP sunucusunun arka planda çalışmaya ve 9501 portunu dinlemeye başladığı anlamına gelir.
Adım 4: Swoole Sunucusuna Erişin
Web tarayıcınızdan aşağıdaki adresleri ziyaret edin:
http://localhost:9501
http://localhost:9501/info
Sırasıyla Hello ServBay!
ve istek bilgilerini içeren bir metin göreceksiniz.
Sunucuyu durdurmak için, betiği çalıştırdığınız terminal penceresine dönüp Ctrl + C
tuşlarına basın.
Swoole ile WebSocket Bağlantılarını Yönetme
Swoole, WebSocket protokolünü yerel olarak destekler ve sohbet uygulamaları, oyun sunucuları, gerçek zamanlı veri iletimi gibi anlık iletişimi gerektiren projeler için idealdir.
Adım 1: WebSocket Sunucu Betiğini Oluşturun
Proje klasörünüzde (servbay-swoole-http
veya yeni bir klasörde, örn. servbay-swoole-websocket
) websocket_server.php
adında bir dosya oluşturup aşağıdaki içeriği ekleyin:
Proje klasörü yolu:
- macOS:
/Applications/ServBay/www/servbay-swoole-http
- Windows:
C:\ServBay\www\servbay-swoole-http
php
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
// Swoole WebSocket sunucu örneği oluştur
// WebSocket sunucusu, HTTP sunucusundan türetildiği için HTTP isteklerini de işleyebilir
$server = new Server("0.0.0.0", 9502); // 9502 portunu dinler
// 'start' olayını kaydet; 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ını kaydet
// Yeni bir WebSocket bağlantısı kurulduğunda tetiklenir
// $request ile istemci bağlantı bilgilerine erişilir; örn. $request->fd istemcinin dosya tanımlayıcısıdır
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
// Hoşgeldin mesajı gönderebilirsiniz
$server->push($request->fd, "ServBay WebSocket Demo'suna hoş geldiniz!");
});
// 'message' olayını kaydet
// Sunucu, istemciden gelen WebSocket mesajını aldığında tetiklenir
// $frame ile mesaj içeriğine ($frame->data) ve gönderenin FD'sine ($frame->fd) erişilir
$server->on("message", function (Server $server, Frame $frame) {
echo "received message from {$frame->fd}: {$frame->data}\n";
// Tüm bağlı istemcilere yayım yapabilir veya sadece göndereni yanıtlayabilirsiniz
// Örneğin, göndereni yanıtlayalım
$server->push($frame->fd, "Merhaba, gönderdiğiniz: {$frame->data}");
// Yayın örneği (bağlantı listesi yönetilmeli veya döngüyle taranmalı)
// foreach ($server->connections as $fd) {
// if ($fd != $frame->fd) { // Gönderen hariç
// $server->push($fd, "Kullanıcı {$frame->fd} şunu dedi: {$frame->data}");
// }
// }
});
// 'close' olayını kaydet
// İstemci bağlantısı kapandığında tetiklenir
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
// Sunucuyu başlat
$server->start();
1
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
49
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
49
Bu betik, 9502 portundan dinleyen bir Swoole WebSocket sunucusu kurar. start
(sunucu başlatıldı), open
(bağlantı kuruldu), message
(mesaj alındı), close
(bağlantı kapandı) gibi önemli olaylara callback fonksiyonları tanımlar. message
olayında, gelen mesaj yanıtlanır.
Adım 2: WebSocket Sunucusunu Çalıştırın
Betik dosyanızın bulunduğu klasörde olduğunuzdan emin olun ve ServBay'deki etkin Swoole PHP sürümü ile çalıştırın:
bash
php websocket_server.php
1
Doğru çalışıyorsa, terminalde şu çıktıyı göreceksiniz:
bash
Swoole WebSocket server is started at ws://0.0.0.0:9502
1
Bu, WebSocket sunucusunun arka planda çalışmaya ve 9502 portunu dinlemeye başladığı anlamına gelir.
Adım 3: WebSocket Sunucusuna Bağlanın
Aşağıdaki yöntemlerden biriyle sunucuya test bağlantısı kurabilirsiniz.
Yöntem A: Tarayıcı Geliştirici Araçları ile
Çoğu modern tarayıcının geliştirici araçları (F12 ile açılır), "Ağ" (Network) veya "Konsol" (Console) panellerinde WebSocket bağlantılarını test etmenize izin verir.
Bir web sayfası açın (örn.
about:blank
).Geliştirici araçlarından "Konsol" (Console) paneline geçin.
Bağlantı kurmak için şu JavaScript kodunu girin:
javascriptvar ws = new WebSocket("ws://localhost:9502"); ws.onopen = function(event) { console.log("WebSocket bağlantısı açıldı:", event); ws.send("Tarayıcıdan Merhaba!"); // Bağlantı kurulduktan sonra mesaj gönder }; ws.onmessage = function(event) { console.log("Sunucudan mesaj geldi:", event.data); // Mesaj alındı }; ws.onerror = function(event) { console.error("WebSocket hatası:", event); // Hata oluştu }; ws.onclose = function(event) { console.log("WebSocket bağlantısı kapandı:", event); // Bağlantı kapatıldı }; // ws.send("mesajınız") ile istediğiniz zaman mesaj gönderebilir, // ws.close() ile bağlantıyı sonlandırabilirsiniz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Konsol da bu kodları çalıştırıp çıktılarını takip edin. Sunucu terminalinde de bağlantı ve mesaj günlüklerini göreceksiniz.
Yöntem B: wscat
Komut Satırı Aracı ile
wscat
, Node.js tabanlı kolay bir komut satırı WebSocket istemcisidir.
wscat
Kurulumu: Node.js ve npm yüklü değilse yükleyin, ardından npm ilewscat
'ı kurun:bashnpm install -g wscat
1WebSocket Sunucusuna Bağlanın: Terminalde şu komutu girin:
bashwscat -c ws://localhost:9502
1Bağlantı kurulduğunda
>
işaretini görürsünüz.Mesaj Gönderin: Komut satırına bir mesaj yazıp enter tuşuna basın:
bash> ServBay ile wscat üzerinden merhaba
1Sunucudan yanıt geldiğinde genellikle
<
ile başlayan çıktı oluşur:bash< Merhaba, gönderdiğiniz: ServBay ile wscat üzerinden merhaba
1Aynı zamanda sunucu terminalinde de günlükler göreceksiniz.
Kapatmak için Ctrl + C
tuşlarına basın.
Dikkat Edilmesi Gerekenler
- Port Çakışması: Swoole sunucusunun dinlediği portların (örn. 9501, 9502) başka bir program tarafından kullanılmadığından emin olun. Port çakışması olduğunda sunucu başlatılamaz.
- PHP Sürümü: Betikleri çalıştırırken ServBay'de Swoole uzantısı aktifleştirilmiş PHP sürümü kullandığınızı kontrol edin.
php -v
ile sürümü görebilirsiniz. ServBay, PHP sürümünü kolayca değiştirmenizi sağlayan bir CLI aracı sunar. - Uzantı Durumu: Sunucu başlatılamıyorsa, kullanılan PHP sürümünde Swoole uzantısının gerçekten etkin olup olmadığını ve ServBay/PHP servisinin yeniden başlatıldığını kontrol edin.
- Sürekli Süreç Yönetimi: Swoole sunucuları kalıcı bellekli süreçlerdir. Üretim ortamında, süreçlerin çökmesi durumunda otomatik yeniden başlatılması için Supervisor, Systemd, pm2 gibi süreç yöneticileri kullanmalısınız. ServBay yerel geliştirme ortamında, elle terminalden çalıştırmak genellikle yeterlidir.
Özet
ServBay sayesinde, Swoole uzantısını kolayca etkinleştirip kullanabilir ve yerel geliştirme ortamında yüksek performanslı PHP uygulamaları geliştirebilirsiniz; ister klasik HTTP servisleri, ister modern WebSocket gerçek zamanlı iletişim projeleri olsun. Swoole’un güçlü özellikleri ile ServBay’in sağladığı pratik geliştirme altyapısı birleştiğinde, PHP geliştiricileri için yeni bir çağ başlıyor. Hemen ServBay’de Swoole’u deneyin ve uygulamalarınızı daha hızlı, daha güçlü hale getirin!