Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Asynchronous Programming with PHP: Swoole & PHP...

Asynchronous Programming with PHP: Swoole & PHP 8.4

Asynchronous Programming with PHP: Swoole & PHP 8.4

This presentation, delivered at PHPKonf 2025 in Istanbul, provides an in-depth exploration of asynchronous programming in PHP—an area where the language has historically lagged behind more modern alternatives like Node.js or Go. With the rise of Swoole and improvements in PHP 8.x, asynchronous capabilities in PHP are now more accessible, powerful, and practical than ever.

🔍 What’s Inside?

✅ Synchronous vs. Asynchronous Programming
We begin by contrasting the traditional synchronous (blocking) model—where tasks execute sequentially—with asynchronous (non-blocking) architectures that enable concurrent execution and better resource utilization. This lays the groundwork for understanding why async is important.

✅ Where Async Shines
- The talk walks through use cases where asynchronous programming in PHP can bring the most value:
- High-concurrency web servers
- Real-time chat and notification systems
- Long-running tasks (e.g., file uploads, external API calls)
- Microservices, IoT, and event-driven architectures

✅ Tooling and Ecosystem
A comparison of popular async libraries and engines in PHP:

- Swoole (native extension, high performance, coroutine support)

- ReactPHP and AMPHP (pure PHP libraries)
The trade-offs between these tools in terms of performance, ease of use, server support, and deployment complexity are explored in detail.

✅ Swoole Internals Explained
- A large portion of the presentation focuses on Swoole, including:
- Event loop and coroutine fundamentals
- Architecture: Master, Reactor, Manager, Worker, and Task Worker processes
- Runtime hooks that make blocking PHP functions (like sleep(), file_get_contents(), or PDO) behave non-blockingly
- Shared memory via OpenSwoole\Table and atomic counters via OpenSwoole\Atomic
- Integration with frameworks like Laravel (Octane) and Symfony (Swoole Bundle)

✅ PHP 8.4 & Fibers
The session covers Fibers, introduced in PHP 8.1 and improved in later versions, which serve as the underlying mechanism for lightweight, controllable async flows. While not full async on their own, Fibers play a key role in userland coroutine implementations.

✅ Benchmarks & Real Projects
Includes real-world benchmarks and two demo projects built using OpenSwoole and PHP 8.4:

- A simple HTTP server
- A multiplayer Tic Tac Toe (XOX) game server

👨‍💻 Who Should Watch This?
This talk is ideal for:
- Backend developers building high-concurrency or real-time applications in PHP
- Teams looking to adopt async design patterns without switching to a different tech stack
- Engineers interested in PHP internals and performance tuning
- Anyone curious about using PHP beyond traditional web-request-response models

⚠️ Also Discussed: What Swoole Is Not
- It’s not a framework like Laravel or Symfony
- It’s not a drop-in web server replacement (though it can be used as one)
- It’s not ideal for low-traffic, CRUD-style apps
- It’s not a “magic bullet” — understanding DevOps and async architecture is essential

Speaker: Fatih M. Koç
Slides: This deck
Code Samples: https://github.com/fmkoc/phpkonf-2025

Avatar for Fatih M. Koc

Fatih M. Koc

May 31, 2025
Tweet

Other Decks in Programming

Transcript

  1. PHP ile Asenkron Programlama Swoole& PHP 8.4 Fatih M. Koç

    github.com/fmkoc linkedin.com/in/fmkoc PHPKonf 2025, Istanbul
  2. Senkron Programlama Blocking PHPKonf 2025, Istanbul Görevler ardışık olarak yürütülür.

    Bir görev tamamlanmadan bir sonraki göreve geçilemez. Örneğin, bir veri tabanı sorgusu veya harici bir API Call yapılırken, uygulama bu işlemin sonucunu beklemek zorundadır ve bu süre zarfında başka hiçbir iş yapamaz.
  3. Asenkron Programlama Non-Blocking PHPKonf 2025, Istanbul Görevler eşzamanlı/bağımsız çalışır. Bir

    işlem başlatıldığında bu işlemin tamamlanması beklenmeden diğer görevlere devam edebilir. İşlem tamamlandığında, bir «callback» veya «promise» aracılığıyla sonuç döndürür. Örneğin, asenkron sistemler, sunucuya birden fazla istek gönderebilir ve her birinin yanıtını beklemeden diğer işlere devam edebilir.
  4. #1 Senkron Programlama Asenkron Programlama Akış • Sıralı (Sequential) •

    Bir görev bitmeden diğeri başlamaz. • Eşzamanlı (Concurrent) • Birden fazla görev aynı anda çalışabilir. Bloklama • Bloklayan (Blocking) • I/O operasyonlarında ana iş parçacığı bekler. • Bloklamayan (Non-Blocking) • I/O operasyonlarında ana iş parçacığı beklemez. Kaynak Kullanımı • Daha Az Verimli • CPU, bir operasyonu beklerken boşta kalabilir. • Daha Verimli • CPU, bir operasyonu beklerken başka işler yapabilir. PHPKonf 2025, Istanbul
  5. #2 Senkron Programlama Asenkron Programlama Yanıt Süresi • Daha Yavaş

    • Uzun süren görevler uygulamayı yavaşlatır. • Daha Hızlı • Genel olarak daha optimizedir. Kod Karmaşıklığı Genellikle Daha Basit Genellikle Daha Karmaşık (Callbacks, promises, coroutines) Temel Kullanım Alanları • CPU Yoğun İşlemler • Sıradan Web Siteleri • I/O Yoğun İşlemler • Gerçek Zamanlı Uygulamalar • Yüksek Eşzamanlılık PHPKonf 2025, Istanbul
  6. Asenkron Programlama Nerelerde Kullanılır Ağ İstekleri (HTTP/API) Dosya Okuma/Yazma (File

    I/O) Veri Tabanı Sorguları Olay İşleme (Events) Eşzamanlı Görevler (Concurrent Jobs) PHPKonf 2025, Istanbul
  7. Asenkron Mimarilerde Kullanılan Bazı Yaygın Araçlar Bu çözümler programlama yaparken

    kullanılamıyor Cevaplarının takip edilmesi gerekliliği var PHPKonf 2025, Istanbul RabbitMQ Redis AWS SQS Kayıt sonrası kullanıcıya mail gönderme vb. Distributed sistemlerde «session» yönetimi API Cache sistemleri vb. Sipariş oluşturma sonrası ürün stoğu düşürme, fatura oluşturma, ödeme işleme vb.
  8. Farklı Dillerde Asenkron Destekleri GO -> goroutine Hafif, thread benzeri

    işlemler Aynı anda binlercesi çalışabilir PHPKonf 2025, Istanbul JS -> async/await Promise tabanlı, okunabilir yapı Tek thread'de yüksek verim sağlar
  9. PHP’dekiYenilikler: Fiber #1 PHP 8.1 ile yayınlandı. PHP 8.3 ile

    FibersAPI daha verimli hale getirildi. Thread gibi değil asimetrik coroutine gibi çalışır. Bir kod bloğunu çalışırken istenen noktada durdurulabilir (suspend) veya devam ettirilebilir (resume). PHPKonf 2025, Istanbul
  10. PHP’deki Yenilikler: Fiber #2 • Tam bir asenkron deneyimi sunmaz.

    • Bazı asenkron işlemleri daha yönetilebilir hale getirir. • Tam olarak «Bekleme anında diğer işe geçme» davranışı gösterir. PHPKonf 2025, Istanbul
  11. PHPKonf 2025, Istanbul #1 Swoole ReactPHP AMPHP Geliştirme C/C++ PHP

    Extension PHP PHP Library PHP PHP Library Kurulum PECL Composer Composer Performans Yüksek Orta* Orta* HTTP/WebSocket Server Var Yok* Yok*
  12. PHPKonf 2025, Istanbul #2 Swoole ReactPHP AMPHP Coroutine Desteği Var

    (Native) Yok Var (GeneratorTabanlı) Event Loop Var Var* Var* PHP-FPM Bağımlılığı Yok Var Var Ayağa Kaldırma Command Line Apache/Nginx Apache/Nginx
  13. Swoole: Öne Çıkan Özellikler Yüksek Performans Gerçek Coroutine Desteği Server

    Desteği: HTTP, WebSocket, TCP, gRPC Microservices & Worker sistemleri için ideal. PHPKonf 2025, Istanbul
  14. Swoole: Eksileri Kurulumu sistem düzeyindedir (PECL) Shared hosting uyumsuzluğu Sınırlı

    framework uyumluluğu (Laravel/Symfony) Windows için WSL / Docker gerekli. PHPKonf 2025, Istanbul
  15. Swoole: Detaylar 2012 yılında yayınladı. C/C++ ile event-driven mimari üzerine

    geliştirildi. 2018 yılında coroutine desteği geldi. (Swoole 4) Baş geliştiricisi: Tianfeng Han Tencent, Alibaba, Baidu, Xiaomi firmalarında çalışanlar tarafından geliştirildi ve kullanıldı: Gerçek zamanlı uygulamalar Yüksek performanslı API sunucuları Mikroservis mimarileri Oyun sunucuları ve canlı yayın sistemleri Asenkron görev işleme ve zamanlayıcılar PHPKonf 2025, Istanbul
  16. Swoole: Ne Değildir? • Geleneksel bir PHP framework değildir. •

    Apache/Nginx yerine geçen bir web server değildir. • Sadece web için değildir. (IoT, TCP/UDP vb.) • «Magic bullet» değildir. • Node.js klonu değildir. PHPKonf 2025, Istanbul
  17. Swoole: Kimler İçin Değildir? • CRUD tabanlı uygulamalar. • Yüksek

    trafikli olmayan web siteleri. • DevOps bilgisi sınırlı olan kişiler. • Hızlı prototip geliştirme ihtiyacı olan projeler. PHPKonf 2025, Istanbul
  18. Swoole: Neler Yapılabilir? • Gerçek zamanlı uygulamalar (Sohbet, anlık bildirim,

    işbirliği araçları) • Yüksek performanslı API’lar ve API Gateway • WebSocket uygulamaları (Oyun sunucusu, gerçek zamanlı panolar) • Mikroservis uygulamaları (Service mesh, dağıtık sistemler) • IoT uygulamaları (Hub, sensör veri işleme) PHPKonf 2025, Istanbul
  19. Swoole vs OpenSwoole Bir fork olarak ortaya çıkmıştır. İngilizce belgelerin

    yetersizliği sebep olmuştur. Aktif olarak geliştirilmektedir. OpenSwoole’un «Docker» desteği ve «Composer» paketleriyle uyumu nispeten daha iyidir. Hyperf Framework Swoole kullanır. Laravel Octane ve Symfony Swoole Bundle OpenSwoole kullanır. PHPKonf 2025, Istanbul
  20. Tanım: Event Loop Linux'taki epoll_wait fonksiyonuna dayanan düşük seviyeli bir

    API’dir Bu yapı, dosya tanımlayıcıları (file descriptor - fd) üzerinden I/O (giriş/çıkış) olaylarını izler. Örneğin, bir soket üzerinden veri geldiğinde veya bir dosya yazılabilir hale geldiğinde, event loop bu olayları algılar ve callback fonksiyonlarını tetikler . PHPKonf 2025, Istanbul
  21. Tanım: Coroutine İşletim sistemi düzeyinde değil, kullanıcı düzeyinde çalışan hafif

    iş parçacıklarıdır. Düşük bellek kullanımıyla yüksek eşzamanlılık sağlarlar. Bloklayıcı I/O işlemlerini asenkron hale getirerek, uygulamanın diğer işlemleri engellemeden çalışmasını sağlarlar. Swoole’da her coroutine, yaklaşık 8KB bellek kullanır, bu da binlerce coroutine'in aynı anda çalışmasını mümkün kılar. (Kaynak: OpenSwoole Docs) PHPKonf 2025, Istanbul
  22. Swoole Çalışma Mantığı Event-driven & multi- process Swoole’da başlıca dört

    ana süreç (process) rolü vardır: Master Process, Reactor Manager Process Worker Task Worker PHPKonf 2025, Istanbul
  23. Master Process (1/4) • Swoole uygulamasını başlatan ana süreçtir. •

    Görevleri: • Konfigürasyon ve başlatma işlemleri. • Listener’ları ayarlar ve portları açar. • Alt süreçlerin (worker, manager, reactor) yönetimini ve yeniden başlatılmasını kontrol eder. • Ağdan gelen bağlantıları kabul eder ve bunları uygun reactor süreçlerine yönlendirir. • PHP kodu master process içinde çalışmaz. Sadece kontrol ve yönetim görevi vardır. PHPKonf 2025, Istanbul
  24. Reactor Process (2/4) • Her bir reactor, TCP/UDP bağlantılarını ve

    ağ olaylarını asenkron olarak işler. • Görevleri: • Ağdan gelen veri okuma/yazma, bağlantı yönetimi ve olayları algılar. • Bağlantılardan gelen istekleri ilgili worker süreçlerine iletir. • Genellikle çekirdek (core) sayısı kadar reactor süreci başlatılır. • Özetle; event loopun asıl döndüğü yerdir; çok hızlıdır ve CPU’da asılı kalmaz. PHPKonf 2025, Istanbul
  25. Manager Process (3/4) • Worker ve task worker süreçlerinin başlatılmasından

    ve izlenmesinden sorumludur. • Görevi: Bir worker veya task worker kapandığında yerine yenisini başlatır. • Bu süreçte de PHP kodu çalışmaz, sadece süreç kontrolü yapar. PHPKonf 2025, Istanbul
  26. Worker Process (4/4) • Asıl PHP uygulama kodunun çalıştığı süreçlerdir.

    • Görevleri: • Ağdan gelen istekleri işler. Kullanıcıdan gelen veriyi işler, yanıt oluşturur ve sonucu istemciye gönderir. • Çok sayıda worker süreci aynı anda çalışabilir, bu sayede paralel istekler işlenir. • Her worker süreci birbirinden bağımsızdır (bellek paylaşmaz). Task Worker: Worker bir iş uzun sürecekse üzerindeki görevi Task worker’a «devreder», böylece ana iş akışını bloke etmeden devam eder. PHPKonf 2025, Istanbul
  27. Değişkenlerin Scope Problemi & Process Kapanınca Yok Olması Her worker

    değişkeni kendi belleğinde tutar, paylaşım yoktur. Bir worker kapanınca tanımlı değişkenler de yok olur. PHPKonf 2025, Istanbul
  28. Swoole Runtime Hook #1 PHP’nin yerleşik olan blocking fonksiyonlarını non-blocking

    hale getirir ve coroutine olarak çalışmasını sağlar. Fonksiyonları alt seviyelerde yakalar ve onları manipüle eder. Mevcut kodda hiçbir değişiklik yapmadan uygulanabilir. Bazı örnekler: sleep() file_get_contents() fopen() stream_socket_client PDO library cURL functions PHPKonf 2025, Istanbul
  29. Swoole Runtime Hook #2 Aşağıdaki örnekte «hook» tüm fonksiyonlar için

    aktifleştirilmiştir. Bazı Flag’ler: • HOOK_CURL • HOOK_SLEEP • HOOK_FILE PHPKonf 2025, Istanbul
  30. Frameworkler ile Kullanımı Laravel: Laravel Octane (Official) https://laravel.com/docs/12.x/octane Symfony: Symfony

    Swoole Bundle https://github.com/symfony-swoole/swoole-bundle PHPKonf 2025, Istanbul
  31. OpenSwoole 25 & PHP 8.4 ile Demo Proje • Simple

    HTTP Server • XOX (TicTacToe) Game Server github.com/fmkoc/phpkonf-2025 PHPKonf 2025, Istanbul