Apa yang Long-Polling, Websockets, Server-Sent Events (SSE) dan Komet?

Saya telah mencoba membaca beberapa artikel, tapi saya tidak begitu jelas pada konsep-konsep yang belum.

Apakah seseorang ingin mengambil gambar di jelaskan padaku apa teknologi ini adalah:

  1. Lama Polling
  2. Server-Sent Events
  3. Websockets
  4. Komet

Satu hal yang saya datang di setiap waktu, server membuat sambungan terbuka dan mendorong data ke klien. Bagaimana koneksi tetap terbuka, dan bagaimana klien mendapatkan didorong data? (Bagaimana klien menggunakan data, mungkin beberapa kode yang mungkin bisa membantu?)

Sekarang, yang mana yang harus saya gunakan untuk aplikasi real-time. Saya telah mendengar banyak tentang websockets (dengan soket.io [a node.js perpustakaan]) tapi mengapa tidak PHP?

Mengomentari pertanyaan (2)
Larutan

Dalam contoh di bawah ini klien adalah browser dan server adalah server web hosting situs web.

Sebelum anda dapat memahami teknologi ini, anda harus memahami klasik HTTP web lalu lintas pertama.

Regular HTTP:

  1. Seorang klien meminta halaman web dari server.
  2. Server menghitung respon
  3. Server mengirimkan respon ke client.

Ajax Polling:

  1. Seorang klien meminta halaman web dari server menggunakan HTTP reguler (lihat HTTP di atas).
  2. Klien menerima laman web yang diminta dan mengeksekusi JavaScript pada halaman yang meminta file dari server secara berkala (misalnya 0,5 detik).
  3. Server menghitung masing-masing respon dan mengirimkannya kembali, seperti biasa lalu lintas HTTP.

Ajax Long-Polling:

  1. Seorang klien meminta halaman web dari server menggunakan HTTP reguler (lihat HTTP di atas).
  2. Klien menerima laman web yang diminta dan mengeksekusi JavaScript pada halaman yang meminta file dari server.
  3. Server tidak segera merespon dengan informasi yang diminta tetapi menunggu sampai ada's baru informasi yang tersedia.
  4. Ketika ada's informasi baru tersedia, server merespon dengan informasi baru.
  5. Klien menerima informasi baru dan segera mengirimkan permintaan ke server, memulai kembali proses.

HTML5 Server Sent Event (SSE) / EventSource:

  1. Seorang klien meminta halaman web dari server menggunakan HTTP reguler (lihat HTTP di atas).
  2. Klien menerima laman web yang diminta dan mengeksekusi JavaScript pada halaman yang membuka koneksi ke server.
  3. Server mengirim sebuah acara untuk klien ketika ada's informasi baru tersedia.
  • Lalu lintas Real-time dari server ke client, sebagian besar yang's apa yang anda'll butuhkan
  • Anda'll ingin menggunakan server yang memiliki acara loop
  • Koneksi dengan server dari domain lain hanya mungkin dengan benar CORS pengaturan
  • Jika anda ingin membaca lebih lanjut, saya menemukan ini sangat berguna: (artikel), (artikel), (artikel), (tutorial).

HTML5 Websockets:

  1. Seorang klien meminta halaman web dari server menggunakan http reguler (lihat HTTP di atas).
  2. Klien menerima laman web yang diminta dan mengeksekusi JavaScript pada halaman yang membuka koneksi dengan server.
  3. Server dan klien sekarang dapat saling mengirim pesan saat data baru (di kedua sisi) tersedia.
  • Lalu lintas Real-time dari server ke client dan dari klien ke server
  • Anda'll ingin menggunakan server yang memiliki acara loop
  • Dengan WebSockets itu adalah mungkin untuk menghubungkan dengan server dari domain lain.
  • Hal ini juga memungkinkan untuk menggunakan pihak ketiga host websocket server, misalnya Pendorong atau lain-lain. Dengan cara ini anda'll hanya harus menerapkan sisi klien, yang sangat mudah!
  • Jika anda ingin membaca lebih lanjut, saya menemukan ini sangat berguna: (artikel), (artikel) (tutorial).

Komet:

Komet adalah kumpulan teknik-teknik sebelum HTML5 yang menggunakan streaming dan panjang-tempat pemungutan suara untuk mencapai aplikasi real-time. Baca lebih lanjut di wikipedia atau ini artikel.


Sekarang, yang mana yang harus saya gunakan untuk aplikasi realtime (yang saya butuhkan untuk kode). Saya telah mendengar banyak tentang websockets (dengan soket.io [a node.js perpustakaan]) tapi mengapa tidak PHP ?

Anda dapat menggunakan PHP dengan WebSockets, check out Ratchet.

Komentar (21)

Tieme menempatkan banyak upaya ke dalam jawaban yang sangat baik, tapi saya pikir inti dari OPs pertanyaannya adalah bagaimana teknologi ini berhubungan dengan PHP bukan bagaimana masing-masing karya teknologi.

PHP adalah bahasa yang paling sering digunakan dalam pengembangan web selain yang jelas client side html, css, dan javascript. Namun PHP memiliki 2 masalah utama ketika datang ke aplikasi real-time:

  1. PHP dimulai sebagai dasar dari CGI. PHP telah berkembang sangat jauh sejak itu's tahap awal, tapi itu terjadi dalam langkah-langkah kecil. PHP telah memiliki banyak jutaan pengguna pada saat itu menjadi cantumkan-mampu dan fleksibel C perpustakaan yang sekarang ini, kebanyakan dari mereka bergantung pada hal itu's model sebelumnya eksekusi, sehingga belum't belum membuat upaya untuk melarikan diri cgi model internal. Bahkan commandline interface memanggil library PHP (libphp5.jadi di linux, php5ts.dll pada windows, dll) seolah-olah itu masih cgi pengolahan GET/POST permintaan. Masih mengeksekusi kode seolah-olah itu hanya memiliki untuk membangun sebuah "page" dan kemudian akhir itu's life cycle. Akibatnya, ia memiliki sangat sedikit dukungan untuk multi-thread atau event driven programming (dalam PHP userspace), sehingga saat ini tidak praktis untuk real time, aplikasi multi-user.

Perhatikan bahwa PHP memiliki ekstensi untuk memberikan event loop (seperti libevent) dan benang (seperti pthreads) di PHP userspace, tapi sangat, sangat, beberapa aplikasi penggunaan ini.

  1. PHP masih memiliki masalah yang signifikan dengan pengumpulan sampah. Meskipun masalah ini telah secara konsisten meningkatkan (mungkin itu's terbesar langkah untuk mengakhiri siklus hidup seperti dijelaskan di atas), bahkan yang terbaik upaya menciptakan lama menjalankan aplikasi PHP yang memerlukan restart secara teratur. Ini juga membuatnya tidak praktis untuk aplikasi real-time.

PHP 7 akan menjadi langkah besar untuk memperbaiki masalah ini juga, dan tampaknya sangat menjanjikan sebagai platform untuk aplikasi real-time.

Komentar (8)

Saya telah mencoba untuk membuat catatan tentang ini dan yang telah dikumpulkan dan contoh-contoh tertulis dari jawa perspektif.

HTTP untuk Pengembang Java

Reverse Ajax - gaya Lama

Async Penanganan pada sisi server

Reverse Ajax - gaya Baru

Server Sent Events

Menempatkan di sini untuk pengembang java yang melihat ke subjek yang sama.

Komentar (0)

Anda dapat dengan mudah menggunakan Node.JS dalam aplikasi web anda hanya untuk komunikasi real-time. Node.JS ini benar-benar kuat saat itu's tentang WebSockets. Oleh karena itu "PHP Pemberitahuan melalui Node.js" akan menjadi sebuah konsep besar.

Lihat contoh ini: Membuat Real-Time Aplikasi Chat dengan PHP dan Node.js

Komentar (0)