Workerman Özellikleri
1. Saf PHP Gelişimi
Workerman ile geliştirilen uygulamalar, php-fpm, apache, nginx gibi konteynerlere bağımlı olmadan bağımsız bir şekilde çalışabilir. Bu, PHP geliştiricilerinin uygulamaları geliştirmesini, dağıtmasını ve hata ayıklamasını çok kolay hale getirir.
2. PHP Çoklu İşlem Desteği
Sunucunun çok CPU performansını tam olarak kullanabilmesi için, Workerman varsayılan olarak çoklu işlem ve çoklu görev desteği sağlar. Workerman, bir ana işlem ve birden fazla alt işlem açarak hizmet verir, ana işlem alt işlemleri izlerken, alt işlemler ağ bağlantılarını tek başlarına dinler ve veri alıp gönderir. Süreç modeli basit olduğundan, Workerman daha kararlı ve daha verimli hale gelir.
3. TCP ve UDP Desteği
Workerman, TCP ve UDP olmak üzere iki tür iletişim protokolünü destekler; yalnızca bir özelliği değiştirerek iletişim protokolünü değiştirebilirsiniz, iş kodlarında herhangi bir değişiklik yapmaya gerek yoktur.
4. Uzun Süreli Bağlantı Desteği
Birçok durumda PHP uygulamasının istemciyle uzun süreli bağlantıda kalması gerekir, örneğin sohbet odaları, oyunlar gibi. Ancak geleneksel PHP konteynerleri (apache, nginx, php-fpm) bunu başarmakta zordur. Workerman ile, sunucu iş mantığı kapatılmadığı sürece PHP uzun bağlantıyı kullanabilirsiniz. Workerman, tek bir işlem ile on binlerce eşzamanlı bağlantıyı destekleyebilir; çoklu işlem ile ise yüz binlerce hatta milyonlarca eşzamanlı bağlantıyı destekler.
5. Çeşitli Uygulama Protokolü Desteği
Workerman arayüzü, çeşitli uygulama katmanı protokollerini, özelleştirilmiş protokoller de dahil olmak üzere destekler. Workerman'da protokol değişimi de oldukça basittir; yalnızca bir alanı yapılandırmak yeterlidir, protokol otomatik olarak değişir, iş kodları sıfır değişiklikle kalır; hatta farklı istemci taleplerini karşılamak için birden fazla farklı protokolün portlarını açabilirsiniz.
6. Yüksek Eşzamanlılık Desteği
Workerman, Libevent olay döngüsü kütüphanesini destekler (event uzantısının kurulması gerekir). Event ile uzun bağlantılarda yüksek eşzamanlılık performansı oldukça üstündür; eğer Event uzantısı kurulmamışsa, PHP'nin dahili Select ile ilgili sistem çağrılarını kullanır, performansı yine oldukça güçlüdür.
7. Hizmetin Pürüzsüz Yeniden Başlatılması
Hizmeti yeniden başlatmanız gerektiğinde (örneğin sürüm yayınlaması), kullanıcı isteklerini işleyen işlemlerin hemen sonlandırılmasını istemeyiz ve yeniden başlatma anında istemci iletişiminin kesilmesini de istemeyiz. Workerman, hizmetin pürüzsüz bir şekilde yükseltilmesini sağlayan pürüzsüz yeniden başlatma işlevini sunar, istemcinin kullanımını etkilemeden hizmeti yükseltir.
8. Dosya Güncellemesi Tespiti ve Otomatik Yükleme Desteği
Geliştirme sürecinde, kodu değiştirdiğimizde hemen etkili olmasını sağlamak isteriz. Workerman, FileMonitor dosya izleme bileşenini sunar; dosya güncellendiğinde, Workerman otomatik olarak reload işlemini çalıştırarak yeni dosyayı yükler ve etkinleştirir.
9. Belirli Bir Kullanıcı ile Alt Süreç Çalıştırma Desteği
Alt süreçler, kullanıcı isteklerini gerçek anlamda işleyen süreçlerdir, bu nedenle güvenlik nedeniyle alt süreçlerin çok yüksek yetkilere sahip olmaması gerekir. Bu nedenle, Workerman, alt süreçleri çalıştıran kullanıcıyı ayarlama desteği sunar, böylece sunucunuz daha güvenli hale gelir.
10. Nesne veya Kaynakların Sürekli Saklanması
Workerman çalışırken, PHP dosyasını yalnızca bir kez yükler ve analiz eder, ardından bellekte kalır; bu, sınıf ve fonksiyon bildirimlerinin, PHP çalışma ortamının, sembol tablosunun vb. tekrar yaratılmadığı anlamına gelir, bu da Web konteynerinde çalışan PHP mekanizmasından tamamen farklıdır. Workerman'da, bir süreç yaşam döngüsü içinde statik üyeler veya global değişkenler, aktif olarak yok edilmediği sürece sürekli saklanır; yani nesneleri veya bağlantı gibi kaynakları global değişkenlerde veya sınıf statik üyelerinde saklamak, mevcut işlemin tüm yaşam döngüsü boyunca yapılan tüm istekler tarafından yeniden kullanılabilir. Örneğin, bir süreç içinde bir kez veritabanı bağlantısı başlatılırsa, o süreçteki tüm istekler bu veritabanı bağlantısını yeniden kullanabilir; bu, veritabanına sık sık bağlanma, TCP üç aşamalı el sıkışma süreci, veritabanı yetkilendirmesi ve bağlantının sonlandırılması sırasında TCP dört aşamalı el sıkışma süreci gibi işlemleri ortadan kaldırır ve uygulama verimliliğini büyük ölçüde artırır.
11. Yüksek Performans
PHP dosyası diskten bir kez okunup analiz edildikten sonra bellekte kalır, bir dahaki kullanımda bellekteki opcode'u doğrudan kullanır, disk IO ve PHP'deki istek başlangıcı, yürütme ortamının oluşturulması, sözdizimsel analiz, derleme opcode, istek kapama gibi pek çok zaman alıcı süreci büyük ölçüde azaltır ve nginx, apache gibi konteynerlere bağımlı olmadan çalıştıklarından nginx gibi konteynerlerle PHP arasındaki iletişim maliyetini azaltırlar. En önemlisi ise kaynakların sürekli olarak korunabilmesi nedeniyle her seferinde veritabanı bağlantısı gibi işlemleri yeniden başlatmaya gerek kalmaz; bu nedenle Workerman ile uygulama geliştirmek, performansı oldukça yüksek hale getirir.
12. HHVM Desteği
HHVM sanal makinesinde çalışmayı destekler, PHP performansını kat kat artırır. Özellikle CPU yoğun işlem işlerinde performansı oldukça mükemmeldir. Gerçek stres testleri karşılaştırıldığında, yüklenmemiş işlerde Workerman'ın HHVM altında çalışması, Zend PHP5.6 altında çalışmasına göre ağ akış hızını yaklaşık %30-80 artırmıştır.