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.

D55de538259751cc08d16a0843e1c69f?s=128

Hidayet Doğan

July 25, 2015
Tweet

Transcript

  1. PHP İLE SOKET PROGRAMLAMA & AĞ SERVİSLERİ HİDAYET DOĞAN

  2. 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
  3. MERHABA! • 1996 C ile soket servis
 Bulletin Board System

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

    • C uzmanı değilim • Linux kernel uzmanı değilim
  5. 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
  6. 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
  7. SOKET? Ağ iletişimini temin eden uyarlama

  8. 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)
  9. 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
  10. 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.

  11. 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ı?
  12. İŞ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
  13. PHP İLE SOKET PROGRAMLAMA “PHP ile soket programlama mı olur

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

    tarzı • Streams Eklentisi
 Basit, PHP 5 ile dahili
  15. 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()
  16. PHP İLE SOKET PROGRAMLAMA SOCKET EKLENTİSİ

  17. PHP İLE SOKET PROGRAMLAMA SOCKET EKLENTİSİ

  18. PHP İLE SOKET PROGRAMLAMA SOCKET EKLENTİSİ

  19. PHP İLE SOKET PROGRAMLAMA SOCKET EKLENTİSİ

  20. 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()
  21. PHP İLE SOKET PROGRAMLAMA STREAM EKLENTİSİ

  22. PHP İLE SOKET PROGRAMLAMA STREAM EKLENTİSİ

  23. PHP İLE SOKET PROGRAMLAMA STREAM EKLENTİSİ

  24. PHP İLE SOKET PROGRAMLAMA STREAM EKLENTİSİ

  25. WEBSOCKET HTML 5 protokolü TCP üzerinden Full-Duplex istemci / sunucu

    iletişimi RFC 6455 ile tanımlı
  26. 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
  27. 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 …)
  28. 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
  29. PHP İLE WEBSOCKET SERVİSİ “Haydi socket veya stream eklentisi ile

    yapalım.” “Epik facia…”
  30. İŞ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)
  31. İŞ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ı
  32. İŞ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
  33. İŞ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
  34. PHP İLE WEBSOCKET SERVİSİ “Ratchet ile yapalım…”

  35. PHP İLE WEBSOCKET SERVİSİ “Ratchet ile yapalım…”

  36. PHP İLE WEBSOCKET SERVİSİ “Swoole eklentisi ile yapalım…”

  37. PHP İLE WEBSOCKET SERVİSİ “Workerman ile yapalım…”

  38. DEMO HTTP://DEMO.HI.DO

  39. SORULAR?

  40. 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