Bilmediğiniz React: ReactPHP

Bilmediğiniz React: ReactPHPSüha BoncukçuBlockedUnblockFollowFollowingJun 7Rasmus Lerdorf 1995 yılında PHP’yi dünyaya duyurduğunda bugün günlük yaşamımızın bir parçası haline gelmiş mimari tartışmalar ve tercihlerin pek çoğu henüz icat edilmemiş veya ihtiyaç duyulmayan teorik şeylerdi.

Duyurulmasının üzerinden 24 sene sonra PHP hâlâ dünyanın en popüler ve en sık kullanılan yazılım dillerinden biri.

Yıl olmuş 2019, neden PHP?Bu sorunun cevabı aslında oldukça basit: PHP öğrenmesi kolay, soyutlamaları mevcut, sürekli gelişen ve çağın sorunlarına cevap verebilen bir yazılım dili.

Bu noktada özellike NodeJS kullanıcılarının “Hani asenkron metodlar?” dediklerini duyar gibiyim.

Unutmamamız gereken şey ise mimarilerin farklı dillere entegre edilebileceği.

ReactPHP tam da bu noktada çözüm sunmaya çalışan ve bağımlılığı olmayan bir paket.

Öncelikle şu ReactJS — ReachPHP karışıklığını giderelim.

2013 yılının Mayıs ayında yapılan JSConfUS’a katılan Jordan Walke; sahneye çıktı ve ReactJS’i duyurdu.

Bu muhteşem konuşmayı şuradan izleyebilirsiniz: https://www.

youtube.

com/watch?v=GW0rj4sNH2wReactPHP ise github reposuna ilk girdiyi 2012 yılının Nisan ayında aldı.

Yani aslında React ismi çalıntı değil.

Bu sorunu da hallettiysek, PHP içeren web mimarilerinin zaman içerisinde gelişimine kısaca bir göz atalım.

30 Mart 2019 Zeetup Etkinliği’ndenGörselde görebileceğiniz gibi ilk başlarda istemci üstünden gelen istekler doğrusal bir mimaride karşılanabiliyorken, gün geçtikçe artan yük ölçeklenebilirlik problemlerini doğurdu.

2019'da ise artık hayatımızda başka kavramlar da var.

Bunlar başlıca şöyle;Amaçların ayrılması (front end, back end, mikro servis mimarileri, vs.

)HTTP Apiler ve RESTful mimarilerÜçüncü parti servislerCanlı veriKomut satırı araçlarıBu kavramları ve getirdiği sorunları çözüme ulaştırmak için NodeJS gerçekten de iyi bir alternatif.

Ne var ki Christian Lück’ün ( https://github.

com/clue) de dediği gibi:“PHP moda değil ancak işini yapıyor.

”Kısacası NodeJS ile uyguladığımız asenkron mimarileri PHP ile neden uygulamayalım?.Bunun için önümüzde görünen gerçekçi bir engel yok.

Peki neden asenkron mimarilere ihtiyaç duyalım?Starbucks sever misiniz?.Hani şu İstanbul’daki her AVM içerisinde en az 2 tane falan olan ve hepimizin çok sevdiği (!) kahveleri aldığımız yer.

Bu popüler kahve dükkanlarının önünde sıra olduğunu görmüşsünüzdür.

Şimdi sizleri benimle beraber küçük çaplı bir kâbus senaryosuna davet ediyorum:Önünüzde 20 kişi var ve sabaha kadar hayalini kurduğunuz o kahveye gerçekten çok ihtiyacınız var.

Siparişi alan arkadaş ağır hareketlerle önüne gelen kişiye siparişini soruyor.

“Laktozsuz sütlü, az buzlu, kafeinsiz bir grande iced latte lütfen”Siparişi alan arkadaş eline plastik bir bardak alarak kahve makinasının önüne gidiyor.

Espresso için çekilmiş kafeinsiz kahveyi makinanın kahve kaşığına yerleştiriyor ve güzelce sıkıştırıyor.

Kahve kaşığını makinaya taktıktan sonra makinanın “double-shot” düğmesine basıyor ve belki de makinadan gelen metalik seslere bir mırıltıyla eşlik ediyor.

Kahve hazır olup espresso bardağına döküldüğünde, plastik bardağı eline alıp kahveyi döküyor.

Arından dolaptan laktozsuz sütü buluyor ve dolduruyor.

Süt belli bir yere geldikten sonra buz üreticiden buz alıp bardağa koyuyor, kapağı kapatıyor ve siparişi teslim ediyor.

Ardından bir sonraki kişinin siparişini alıyor.

Kâbus gibi değil mi?.İşte bu sorunu yaşamamak için genelde bu kahve dükkanları sipariş alma ve siparişlerin hazırlanması süreçlerini birbirinden ayırarak ve asenkron biçimde tamamlıyor.

ReactPHP ile basit bir server yazmak ister misiniz?ReactPHP’nin resmi sayfası (https://reactphp.

org/) sizi tam da bu örnekle karşılıyor.

Basit.

Değil mi?Peki başka neler yapabiliriz?.Örneğin yüksek boyutlu bir dosyayı asenkron okuyabiliriz.

İşlem bittiğinde yapılacak işleri de bir Promise vasıtasıyla belirleyebiliriz.

ReactPHP kütüphanesinin 3 ana bileşeni şöyle;Event Loop (Reactor) (Olay döngüsü)StreamsPromisesBu bileşenlerle ilgili detaylı bilgileri https://reactphp.

org/ adresinden edinebilirsiniz.

Bu gönderi içerisinde ise ReactPHP’nin çok sevdiğim bazı özelliklerini hazırladığım örneklerle anlatmaya çalışacağım.

Aşağıdaki örnekte iki farklı boyuttaki görselin aynı anda indirilmeye başlanmasını sağlıyoruz ve düşük boyutlu olan görsel diğerinden önce indiriliyor.

Burada dikkat etmemiz gereken nokta ilk görselin indirilmesini beklemeden ikinci görselin indirilmeye başlanmış olması.

Çok sevdiğim kullanımlardan biri de cache ile ilgili.

Normalde yazdığım uygulamalarda Redis üstünde cache tutmayı seviyorum.

Peki ya Redis sunucumda bir gecikme problemi yaşıyorsam?.(Bu cümlelerde Redis yerine istediğiniz bir teknoloji parçasını koyabilirsiniz) Fonksiyonumun gereken cevabı vermesi için gerçekten cacheleme işleminin bitmesi zorunlu mu?.Tabi ki değil!İşte bu kadar!.artık Cache sınıfımda bulunan bu metod ile birlikte, çıktısına bakmadan asenkron biçimde cacheleme komutu verebilirim.

Etkilendiniz mi?ReactPHP ile ilgili çok daha geniş bilgiye elbette https://reactphp.

org/ adresine ve Christian Lück’ün muhteşem sunumuna ( http://speakerdeck.

com/clue/pushing-the-limits-of-php-webengac19) başvurabilirsiniz.

Benim 30 Mart 2019 Zeetup Etkinliği’nde yaptığım sunuma ise şuradan ulaşabilirsiniz: https://github.

com/suhaboncukcu/presentationsAsenkron PHP ile ilgili sorularınız varsa bana twitter üzerinden (/suhaboncukcu) ulaşabilirsiniz.

Kalın sağlıcakla!.

. More details

Leave a Reply