Pertanyaan Apa itu Long-Polling, Websockets, Server-Sent Events (SSE) dan Comet?


Saya telah mencoba membaca beberapa artikel, tetapi saya belum begitu jelas konsepnya.

Apakah seseorang ingin mencoba menjelaskan kepada saya apa teknologi ini:

  1. Polling Panjang
  2. Acara Terkirim Server
  3. Websockets
  4. Komet

Satu hal yang saya temui setiap kali adalah, server membuat koneksi terbuka dan mendorong data ke klien. Bagaimana koneksi tetap terbuka, dan bagaimana klien mendapatkan data yang didorong? (Bagaimana klien menggunakan data, mungkin beberapa kode mungkin membantu?)

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


876
2018-06-18 06:28


asal


Jawaban:


Pada contoh di bawah ini klien adalah browser dan server adalah webserver yang menghosting situs web.

Sebelum Anda dapat memahami teknologi ini, Anda harus mengerti klasik Lalu lintas web HTTP terlebih dahulu.

HTTP Reguler:

  1. Klien meminta halaman web dari server.
  2. Server menghitung respons
  3. Server mengirim respons ke klien.

HTTP

Polling Ajax:

  1. Klien meminta halaman web dari server menggunakan HTTP biasa (lihat HTTP di atas).
  2. Klien menerima halaman web yang diminta dan mengeksekusi JavaScript pada halaman yang meminta file dari server secara berkala (misalnya 0,5 detik).
  3. Server menghitung setiap respons dan mengirimnya kembali, sama seperti lalu lintas HTTP normal.

Ajax Polling

Ajax Long-Polling:

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

Ajax Long-Polling

HTML5 Server Sent Events (SSE) / EventSource:

  1. Klien meminta halaman web dari server menggunakan HTTP biasa (lihat HTTP di atas).
  2. Klien menerima halaman web yang diminta dan mengeksekusi JavaScript pada halaman yang membuka koneksi ke server.
  3. Server mengirim acara ke klien ketika ada informasi baru yang tersedia.

    • Lalu lintas waktu nyata dari server ke klien, sebagian besar itulah yang Anda butuhkan
    • Anda akan ingin menggunakan server yang memiliki loop acara
    • Tidak mungkin terhubung dengan server dari domain lain
    • Jika Anda ingin membaca lebih lanjut, saya menemukan ini sangat berguna: (artikel), (artikel), (artikel), (tutorial).

HTML5 SSE

HTML5 Websockets:

  1. Klien meminta halaman web dari server menggunakan http biasa (lihat HTTP di atas).
  2. Klien menerima halaman web yang diminta dan mengeksekusi JavaScript pada halaman yang membuka koneksi dengan server.
  3. Server dan klien sekarang dapat saling mengirim pesan ketika data baru (di kedua sisi) tersedia.

    • Lalu lintas waktu nyata dari server ke klien dan dari klien ke server
    • Anda akan ingin menggunakan server yang memiliki loop acara
    • Dengan WebSockets adalah mungkin untuk terhubung dengan server dari domain lain.
    • Juga dimungkinkan untuk menggunakan server web host yang di-host oleh pihak ketiga, misalnya Pusher atau yang lain. Dengan cara ini Anda hanya perlu menerapkan sisi klien, yang sangat mudah!
    • Jika Anda ingin membaca lebih lanjut, saya menemukan ini sangat berguna: (artikel), (artikel) (tutorial).

HTML5 WebSockets

Komet:

Comet adalah kumpulan teknik sebelum HTML5 yang menggunakan streaming dan polling panjang untuk mencapai aplikasi waktu nyata. Baca lebih lanjut tentang wikipedia atau ini artikel.


Sekarang, yang mana yang harus saya gunakan untuk aplikasi realtime (yang saya perlukan   kode). Saya telah mendengar banyak tentang websockets (dengan socket.io [a   node.js library]) tetapi mengapa tidak PHP?

Anda dapat menggunakan PHP dengan WebSockets, periksa Roda bergigi searah.


1855
2017-10-12 08:57



Tieme berusaha keras untuk menjawabnya, tetapi saya pikir inti pertanyaan OP adalah bagaimana teknologi ini berhubungan dengan PHP daripada bagaimana setiap teknologi bekerja.

PHP adalah bahasa yang paling sering digunakan dalam pengembangan web selain sisi klien yang jelas html, css, dan javascript. Namun PHP memiliki 2 masalah utama dalam hal aplikasi waktu nyata:

1) PHP dimulai sebagai CGI yang sangat dasar. PHP telah berkembang sangat jauh sejak tahap awal, tetapi itu terjadi dalam langkah-langkah kecil. PHP sudah memiliki jutaan pengguna pada saat itu menjadi perpustakaan C yang dapat disematkan dan fleksibel seperti sekarang ini, yang sebagian besar bergantung pada model eksekusi yang lebih awal, sehingga belum membuat upaya yang kuat untuk melarikan diri dari model cgi secara internal. Bahkan antarmuka baris perintah memanggil pustaka PHP (libphp5.so di linux, php5ts.dll pada windows, dll) seolah-olah masih berupa cgi memproses permintaan GET / POST. Ini masih mengeksekusi kode seolah-olah hanya harus membangun "halaman" dan kemudian mengakhiri siklus hidupnya. Akibatnya, ia memiliki sedikit dukungan untuk pemrograman multi-thread atau event driven (dalam PHP userspace), membuatnya saat ini tidak praktis untuk aplikasi multi-user yang real-time.

Perhatikan bahwa PHP memiliki ekstensi untuk menyediakan loop peristiwa (seperti libevent) dan untaian (seperti pthreads) di ruang pengguna PHP, tetapi sangat, sangat, sedikit aplikasi yang menggunakan ini.

2) PHP masih memiliki masalah signifikan dengan pengumpulan sampah. Meskipun masalah ini telah meningkat secara konsisten (kemungkinan itu adalah langkah terbesar untuk mengakhiri siklus hidup seperti yang dijelaskan di atas), bahkan upaya terbaik untuk membuat aplikasi PHP yang berjalan lama perlu di-restart secara teratur. Ini juga membuatnya tidak praktis untuk aplikasi waktu nyata.

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


31
2017-10-14 07:11



Saya telah mencoba membuat catatan tentang ini dan telah mengumpulkan dan menulis contoh dari perspektif java.

HTTP untuk Pengembang Java

Reverse Ajax - Gaya lama

Async Handling di sisi server

Reverse Ajax - Gaya baru

Acara Terkirim Server

Taruh di sini untuk pengembang java yang mencari subjek yang sama.


7
2018-04-21 14:47