Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP ile Soket Programlama ve Ağ Servisleri

PHP ile Soket Programlama ve Ağ Servisleri

PHP ile soket programlama nasıl yapılır, ağ servisleri nasıl oluşturulabilir, günümüzde adını sıkça duyduğumuz WebSocket ve gerçek zamanlı web uygulamalarını PHP ile nasıl geliştirebiliriz gibi soruların yanıtlarını alıp, bunlar için geliştirilen kütüphane ve eklentileri tanıyacağız.

Hidayet Doğan

July 25, 2015
Tweet

More Decks by Hidayet Doğan

Other Decks in Programming

Transcript

  1. MERHABA! • 1995 programlama ile tanışma • 1998 yılından itibaren

    PHP • 1999 yılından itibaren iş hayatı • 1998 (ya da 1999) yılından itibaren ögrenci • Kurucu Ortak & Yazılım Uzmanı
 @ Yazılım Parkı • Yazılım Uzmanı
 @ İ. D. Bilkent Üniversitesi Fotoğraf: Onur Canalp
  2. MERHABA! • 1996 C ile soket servis
 Bulletin Board System

    (BBS), Multi User Dungeon (MUD)
 
 https://github.com/hdogan/HuskyBBS
  3. FERAGATNAME • Ağ uzmanı değilim • Soket programlama uzmanı değilim

    • C uzmanı değilim • Linux kernel uzmanı değilim
  4. KISALTMALAR • IP: Internet Protocol
 Veri paketlerini (datagram) karşı tarafa

    aktarma • TCP: Transmission Control Protocol
 Teslim edilecek veri paketlerin bütünlüğünü doğrulama
 Örnek: HTTP, WebSocket • UDP: User Datagram Protocol
 Düşük gecikmeli, veri paketi teslimatı garantisiz
 Örnek: DNS
  5. TANIMLAR • IP Adresi
 Ağda bulunan sunucunun/aygıtın kimliği
 Örnek: 8.8.4.4,

    127.0.0.1, ff02::1, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 • Port Numarası
 Ağ servisinin sunucu/aygıt üzerindeki kimliği
 Örnek: 80, 443, 53, 143, 993, 65535
  6. SOKET? Servis IP: 203.0.113.1 Port: 80 İstemci #1 IP: 192.0.2.1

    Port: 56910 İstemci #2 IP: 198.51.100.35 Port: 25612 Soket (Priz) Soket (Priz) Veri Akışı (Fiş) Soket (Priz)
  7. VERİ AKIŞI • Simplex
 Tek yönlü, yanıt almaya ihtiyaç duymayan


    Örnek: Yangın alarmı • Half-Duplex
 Çift yönlü, fakat akış bir seferde tek bir yöne
 Örnek: Faks • Full-Duplex
 Çift yönlü, akış aynı anda tüm yönlere
 Örnek: Telefon
  8. KİPLER BLOCKING & NON-BLOCKING • Blocking Kipi
 Programın işleyişi işlemler

    (I/O, bağlantı kurma/ kabul etme gibi) bitene kadar bekler. • Non-Blocking Kipi
 İşlemler anında yanıt döner. Bittiğinde programa haber/sinyal verilir.

  9. OLAYLARI YÖNETMEK • select (Linux, Windows) • poll (Solaris) •

    epoll (Linux) • kqueue (BSD, Mac) Okuyacak/gönderilecek veri var mı? Hata oluştu mu? Zaman aşımı var mı?
  10. İŞLEYİŞ (TCP AĞ SERVİSİ) 1. Soket oluştur (Socket) 2. IP

    ve Port belirle (Bind) 3. Dinle (Listen) 4. Everything is something happened?
 (select, poll, epoll, kqueue) 5. Yeni bir bağlantı mı var? (Accept) 6. Oku / Yaz / Bağlantıyı kapat (Read / Write / Close) 7. Goto 4
  11. PHP İLE SOKET PROGRAMLAMA “PHP ile soket programlama mı olur

    ya.” –Troll Dayı “Hafıza kaçakları var, çatlıyor, patlıyor.” –Fosil Dayı
  12. PHP İLE SOKET PROGRAMLAMA • Socket Eklentisi
 Düşük seviye, C

    tarzı • Streams Eklentisi
 Basit, PHP 5 ile dahili
  13. PHP İLE SOKET PROGRAMLAMA SOCKET EKLENTİSİ 1. Soket oluştur: socket_create()

    2. IP ve Port belirle: socket_bind() 3. Dinle: socket_listen() 4. Everything is something happened? socket_select() 5. Yeni bağlantıyı kabul et: socket_accept() 6. Oku / Yaz / Bağlantıyı kapat:
 socket_read() socket_write() socket_close()
  14. PHP İLE SOKET PROGRAMLAMA STREAM EKLENTİSİ 1. Soket oluştur: stream_socket_server()

    2. IP ve Port belirle: stream_socket_server() 3. Dinle: stream_socket_server() 4. Everything is something happened? stream_select() 5. Yeni bağlantıyı kabul et: stream_accept() 6. Oku / Yaz / Bağlantıyı kapat: fread() fwrite() fclose()
  15. WEBSOCKET • Düşük gecikme süresi, az masraflı • Cross Origin

    • AJAX, Long-Polling, Flash Socket yerine • Kalıcı bağlantı • HTTP üzerinden el sıkışıp
  16. WEBSOCKET SUNUCU TARAYICI HTTP HTTP WebSocket WebSocket WebSocket’e geçiş yapalım.

    (Upgrade) Tabiki. Artık benimle WebSocket üzerinden iletişim kuracaksın. Nörüyon? (0x00 0xff …) Nöriym, sen nörüyon? (0x00 0xff …)
  17. WEBSOCKET • Safari 7+ • Chrome 16+ • Opera 12.1+

    (ve Mobile) • Firefox 11+ • Internet Explorer 10+ • iOS Safari/Chrome 6.1+ • Andoid Browser 4.4+ • BlackBerry Browser 7+ • Opera Mobile 12.1+ • Firefox Android 38+ • IE Mobile 10+ Kaynak: caniuse.com
  18. İŞLERİ KOLAYLAŞTIRALIM DİĞERLERİ • Ruby: EventMachine • Python: Twisted, Tornado

    • JavaScript: Node.js, io.js • Java: Apache Mina, Netty • C: Libevent, Libev, Libuv • C#: Reactive Extensions (Rx)
  19. İŞLERİ KOLAYLAŞTIRALIM PHP • libevent Eklentisi:
 C libevent kütüphanesi uyarlaması

    • event Eklentisi:
 C libevent kütüphanesi uyarlaması, nesneye dayalı, asenkron DNS çözümleyici, HTTP servisi/istemcisi • ev Eklentisi:
 C libev kütüphanesi uyarlaması, nesneye dayalı
  20. İŞLERİ KOLAYLAŞTIRALIM PHP • libuv Eklentisi:
 C libuv kütüphanesi uyarlaması,

    deneysel, temel ağ servisi/istemcisi • swoole Eklentisi:
 Made in China, Tencent, nesneye dayalı, temel ağ servisi, HTTP servisi, WebSocket servisi
  21. İŞLERİ KOLAYLAŞTIRALIM PHP • React:
 stream, libevent, event, ev, temel

    ağ servisi/ istemcisi, HTTP servisi/istemcisi • Ratchet:
 React ile WebSocket servisi • Workerman:
 Made in China, stream, libevent, temel ağ servisi, HTTP servisi, WebSocket servisi
  22. TEŞEKKÜRLER! KAYNAKLAR • reactphp.org • socketo.me (Ratchet) • swoole.com •

    workerman.net • hoa-project.net HI.DO • http://hi.do • @hdogan • github.com/hdogan • speakerdeck.com/hdogan • tr.linkedin.com/in/hdogan https://github.com/hdogan/phpkonf-2015-demos