Swoole Kullanarak Yüksek Performanslı PHP Uygulaması Oluşturma
Swoole Nedir?
Swoole, PHP için yüksek performanslı bir ağ iletişim çerçevesidir. Asenkron, çok iş parçacıklı ve korutin gibi özellikler sunarak, PHP'nin Node.js gibi yüksek eşzamanlı görevleri icra etmesini sağlar. TCP, UDP, UnixSocket, HTTP, WebSocket gibi birçok protokolü destekler ve yüksek performanslı Web sunucuları, mikro hizmet mimarileri, gerçek zamanlı iletişim sistemleri gibi kullanımlar için uygundur.
Swoole'un Ana Özellikleri ve Avantajları
- Yüksek Performans: Swoole, C diliyle yazılmış olup yüksek performansa sahiptir. Asenkron IO ve korutin destekler ve yüksek eşzamanlı istekleri işleyebilir.
- Zengin Fonksiyonlar: Çeşitli ağ protokollerini, zamanlayıcıları, süreç yönetimini ve hafıza yönetimini destekler ve tam ihtiyaçlara göre geliştirme taleplerini karşılar.
- Kullanım Kolaylığı: Kolay anlaşılabilir API ve zengin belgelendirme sunarak geliştiricilerin hızlı bir başlangıç yapmasını sağlar.
- Güçlü Genişletilebilirlik: Özelleştirilmiş uzantılar ve eklentiler destekler, ihtiyaçlara göre esnek bir şekilde özelleştirilebilir.
Swoole, yüksek performanslı Web uygulamaları ve gerçek zamanlı iletişim sistemleri oluşturmak için ideal bir seçimdir ve küçük uygulamalardan büyük kurumsal sistemlere kadar çeşitli projelere uygundur.
Swoole Kurulumu
Bu yazıda, ServBay ortamında Swoole'un nasıl kurulacağını ve kullanılacağını tanıtacağız.
TIP
ServBay, geliştiricilerin web sitelerini yönetimi kolaylaştırmak için /Applications/ServBay/www
dizininde tutmalarını tavsiye eder.
Adım 1: Swoole Uzantısının Kurulması
Swoole Uzantısını Etkinleştirin
ServBay, Swoole uzantısını zaten içermektedir. Kullanıcının sadece etkinleştirmesi ve PHP'yi yeniden başlatması gerekmektedir. Swoole modülünün nasıl etkinleştirileceğine dair bilgi için ServBay ile Gelen Swoole Modülünü Nasıl Etkinleştirirsiniz başlıklı makaleye bakınız.
Adım 2: Proje Dizinini Oluşturma
Proje dizinini oluşturun ve bu dizine girin:
cd /Applications/ServBay/www
mkdir servbay-swoole-app
cd servbay-swoole-app
2
3
Adım 3: Swoole Sunucu Betiği Oluşturma
Proje dizininde server.php
adlı bir dosya oluşturun ve basit bir Swoole HTTP sunucusu yazın:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Server("0.0.0.0", 9501);
$server->on("start", function (Server $server) {
echo "Swoole HTTP server started at http://0.0.0.0:9501\n";
});
$server->on("request", function (Request $request, Response $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello ServBay!");
});
$server->start();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Adım 4: Swoole Sunucusunu Çalıştırma
Swoole sunucusunu başlatmak için terminalde aşağıdaki komutu çalıştırın:
php server.php
Aşağıdaki çıktıyı göreceksiniz:
Swoole HTTP server started at http://0.0.0.0:9501
Adım 5: Swoole Sunucusuna Erişme
Tarayıcıyı açarak http://localhost:9501
adresine gidin, sayfanın Hello ServBay!
çıktısını verdiğini göreceksiniz.
Swoole Kullanarak Web Uygulaması Oluşturma
Bu bölümde, Swoole kullanarak basit bir Web uygulaması nasıl oluşturulacağını anlatacağız.
Kontrolcü ve Yönlendirme Oluşturma
Proje dizininde app
adında bir dizin oluşturun ve içinde controllers
ve routes
dizinlerini de oluşturun:
mkdir -p app/controllers
mkdir -p app/routes
2
app/controllers
dizininde HomeController.php
adında bir dosya oluşturun:
<?php
namespace App\Controllers;
class HomeController
{
public function index()
{
return "Welcome to ServBay!";
}
public function hello($name)
{
return "Hello, $name!";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
app/routes
dizininde web.php
adında bir dosya oluşturun:
<?php
use App\Controllers\HomeController;
return [
'GET /' => [HomeController::class, 'index'],
'GET /hello/{name}' => [HomeController::class, 'hello'],
];
2
3
4
5
6
7
8
Swoole Sunucu Betiğini Güncelleme
server.php
dosyasını güncelleyin, yönlendirme çözümleme ve kontrolcü çağırma mantığı ekleyin:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
use FastRoute\RouteCollector;
use function FastRoute\simpleDispatcher;
require 'vendor/autoload.php';
$server = new Server("0.0.0.0", 9501);
$routes = require __DIR__ . '/app/routes/web.php';
$dispatcher = simpleDispatcher(function (RouteCollector $r) use ($routes) {
foreach ($routes as $route => $handler) {
list($method, $path) = explode(' ', $route);
$r->addRoute($method, $path, $handler);
}
});
$server->on("start", function (Server $server) {
echo "Swoole HTTP server started at http://0.0.0.0:9501\n";
});
$server->on("request", function (Request $request, Response $response) use ($dispatcher) {
$routeInfo = $dispatcher->dispatch($request->server['request_method'], $request->server['request_uri']);
switch ($routeInfo[0]) {
case \FastRoute\Dispatcher::NOT_FOUND:
$response->status(404);
$response->end('404 Not Found');
break;
case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
$response->status(405);
$response->end('405 Method Not Allowed');
break;
case \FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
list($class, $method) = $handler;
$response->header("Content-Type", "text/plain");
$response->end(call_user_func_array([new $class, $method], $vars));
break;
}
});
$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
FastRoute Kurma
Proje kök dizininde aşağıdaki komutu çalıştırarak FastRoute yönlendirme kütüphanesini kurun:
composer require nikic/fast-route
Swoole Sunucusunu Çalıştırma
Swoole sunucusunu başlatmak için terminalde aşağıdaki komutu çalıştırın:
php server.php
Web Uygulamasına Erişme
Tarayıcıyı açarak aşağıdaki URL'lere gidin:
http://localhost:9501/
: Sayfanın çıktısındaWelcome to ServBay!
ifadesini göreceksiniz.http://localhost:9501/hello/ServBay
: Sayfanın çıktısındaHello, ServBay!
ifadesini göreceksiniz.
Swoole Kullanarak WebSocket Bağlantılarını İşleme
Swoole, WebSocket protokolünü de destekler ve bu, gerçek zamanlı iletişim uygulamaları oluşturmak için kullanılabilir. Swoole kullanarak WebSocket bağlantılarını nasıl işleyeceğimizi anlatacağız.
WebSocket Sunucu Betiği Oluşturma
Proje dizininde websocket_server.php
adlı bir dosya oluşturun ve basit bir WebSocket sunucusu yazın:
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
$server = new Server("0.0.0.0", 9502);
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server started at ws://0.0.0.0:9502\n";
});
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
});
$server->on("message", function (Server $server, Frame $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, "Hello, {$frame->data}");
});
$server->on("close", function ($ser, $fd) {
echo "connection closed: {$fd}\n";
});
$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
WebSocket Sunucusunu Çalıştırma
WebSocket sunucusunu başlatmak için terminalde aşağıdaki komutu çalıştırın:
php websocket_server.php
Aşağıdaki çıktıyı göreceksiniz:
Swoole WebSocket server started at ws://0.0.0.0:9502
WebSocket Sunucusuna Bağlanma
Tarayıcıdaki WebSocket istemcisini kullanarak veya başka WebSocket istemci araçları (örneğin: wscat
) kullanarak WebSocket sunucusuna bağlanabilirsiniz.
wscat
Kullanarak Bağlanma
wscat
ı kurun:bashnpm install -g wscat
1WebSocket sunucusuna bağlanın:
bashwscat -c ws://localhost:9502
1Mesaj gönderin:
bash> Hello ServBay
1
Sunucunun gönderdiği mesajı göreceksiniz:
< Hello, Hello ServBay
Bu adımlı işlemlerle, Swoole ile bir proje oluşturup işlettiğinizi ve Swoole'un sunduğu özellikleri kullanarak HTTP isteklerini ve WebSocket bağlantılarını işlediğinizi başarıyla tamamladınız. Swoole'un yüksek performansı ve zengin özellikleri, yüksek eşzamanlı uygulamalar oluşturmak için ideal bir seçimdir.