Apakah WebRTC menggunakan HTTP?
Apakah WebRTC menggunakan HTTP
Membuka koneksi TCP baru untuk setiap permintaan menjadi masalah saat web berkembang. Kami mulai membangun aplikasi lengkap alih -alih halaman web sederhana, dan jumlah media dan file yang diperlukan browser untuk diambil menjadi lebih. Bayangkan aplikasi web khas yang membutuhkan file HTML, CSS, dan JavaScript, serta berbagai gambar dan aset lainnya. Untuk setiap file, koneksi baru harus dibuat.
Streaming WebRTC vs HTTP
Возожно, ареса электронной почты явюю аонимныи дря дой говииииииamah дancing дзии дзпы дilat е ктнной почты частников, чтобы увидеть иходное собщение нandi.
-Diskusikan-Webrtc
Saya telah bereksperimen dengan protokol streaming WEBRTC dan HTTP (HLS, MPEG-dash) untuk streaming video langsung selama beberapa hari sekarang, dan telah menemukan bahwa sementara WEBRTC mencapai latensi kedua, protokol streaming HTTP selalu memiliki latensi multi-detik, HTTP memiliki latensi multi-detik, HTTP memiliki multi-detik, HTTP memiliki multi-detik, HTTP memiliki latensi multi-detik, HTTP memiliki multi-detik HTTP selalu memiliki multi-detik. Karena itu saya memiliki beberapa pertanyaan terkait dengan streaming WebRTC vs HTTP.
1. Bagaimana WebRTC dapat mencapai latensi sub kedua dibandingkan dengan protokol streaming HTTP?
WebRTC mampu mencapai latensi sub kedua dibandingkan dengan protokol streaming HTTP karena kemampuan komunikasi real-time (RTC). WebRTC dibangun untuk menyediakan aplikasi dengan transmisi instan video, audio, dan data lainnya di antara rekan. Ini memungkinkan transmisi konten yang hampir seketika, menghasilkan latensi sub kedua.
2. Jika WebRTC sudah menyediakan streaming video latensi rendah, mengapa ada upaya untuk menyatukan protokol streaming HTTP di bawah standar MPEG-DASH?
Upaya untuk menyatukan protokol streaming HTTP di bawah standar MPEG-dash didorong oleh kebutuhan untuk pendekatan standar untuk streaming berbasis HTTP. Meskipun WebRTC menyediakan streaming video latensi rendah, itu tidak cocok untuk semua kasus penggunaan dan mungkin tidak kompatibel dengan semua perangkat dan perangkat lunak. Dengan menyatukan protokol streaming HTTP di bawah standar MPEG-DASH, menjadi lebih mudah bagi penyedia konten untuk memberikan streaming video berkualitas tinggi di berbagai platform dan perangkat, memastikan pengalaman menonton yang konsisten bagi pengguna.
3. Bagaimana WebRTC dibandingkan dengan RTMP? (Saya belum menjelajahi RTMP sampai sekarang, tetapi saya ingin tahu apakah mungkin untuk mencapai latensi sub-detik dengan RTMP)
WebRTC dan RTMP keduanya adalah protokol yang digunakan untuk media streaming, tetapi mereka memiliki beberapa perbedaan dalam hal latensi dan kompatibilitas. WebRTC dirancang untuk komunikasi waktu nyata dan dapat mencapai latensi sub-detik, membuatnya cocok untuk aplikasi yang membutuhkan transmisi instan. Di sisi lain, RTMP (Real-Time Messaging Protocol) adalah protokol yang terutama digunakan untuk streaming audio, video, dan data antara encoder dan server streaming. Sementara RTMP dapat memberikan streaming latensi rendah, mencapai latensi sub-detik mungkin tergantung pada berbagai faktor seperti kondisi jaringan dan konfigurasi server.
Studi perbandingan antara streaming berbasis WEBRTC dan HTTP
Untuk waktu yang lama, menurunkan latensi streaming telah menjadi topik yang populer. Latensi puluhan detik, dan bahkan satu menit, telah diketahui terjadi dengan streaming berbasis HTTP di masa lalu. Dengan latensi siaran tradisional dalam detik satu digit dan solusi yang muncul seperti Layanan Pengembangan WebRTC, Pertanyaannya adalah pendekatan mana yang harus diambil. Streaming WebRTC mampu mengirimkan video tidak hanya di sub-detik, tetapi dalam waktu kurang dari 500 milidetik. Saat ini teknologi streaming latensi terendah yang tersedia, memungkinkan transmisi yang hampir seketika.
Dalam panduan bagus ini, kita akan melihat bagaimana WebRTC bekerja dan membandingkannya dengan http dari perspektif a Layanan streaming video. Ayo Memulai!
Ringkasan cepat streaming berbasis HTTP & WEBRTC
Protokol berbasis HTTP secara teknis adalah server web reguler yang mengirimkan unduhan progresif. Mereka menggunakan streaming bitrate adaptif untuk memberikan kualitas video setinggi mungkin dan pengalaman menonton, terlepas dari koneksi, perangkat lunak, atau perangkat. Beberapa protokol berbasis HTTP yang paling umum tersedia termasuk MPEG-Dash, Apple’S HLS, Adobe HDS, dan Microsoft Smooth Streaming.
WebRTC adalah protokol yang kuat yang didukung oleh alat yang sangat baik dan dukungan industri yang luas. Itu dibuat untuk memberikan aplikasi dengan kemampuan komunikasi real-time (RTC), memungkinkan video, audio, atau jenis data lainnya untuk ditransfer di antara rekan. Ini adalah perbedaan utama antara keduanya jika dibandingkan dengan streaming berbasis HTTP, yang berorientasi pada klien-server.
UDP vs. TCP
Komponen Dasar Protokol Internet, Pengguna Datagram Protocol (UDP) dan Transmission Control Protocol (TCP), keduanya berada di lapisan transportasi.
Perbedaan utama antara UDP dan TCP adalah bahwa TCP membutuhkan jabat tangan tiga arah saat mengirimkan data. Inisiator (klien) meminta agar akseptor (server) membuat koneksi, akseptor menjawab, dan inisiator mengakui respons dan mempertahankan sesi antara kedua ujungnya. Oleh karena itu, TCP sangat kredibel dan dapat menangani kehilangan paket dan pemesanan.
UDP, di sisi lain, tidak’t membutuhkan jabat tangan untuk memulai. Ini mentransfer data terlepas dari kendala bandwidth, yang membuatnya lebih cepat dan berisiko. Karena UDP tidak mendukung transmisi, pemesanan paket, atau pemeriksaan kesalahan, cegukan jaringan memiliki potensi untuk mencemari data dalam transit.
Protokol seperti WEBRTC sering menggunakan UDP, sedangkan protokol berbasis HTTP menggunakan TCP.
Bagaimana WebRTC menumpuk versus streaming berbasis http?
- Jenis latensi apa yang Anda cari?
- Berapa ukuran penonton?
- Berapa jumlah maksimum yang ingin Anda belanjakan?
Latensi
Jawaban atas pertanyaan latensi tergantung pada rentang latensi yang Anda tuju.
HLS baru dan ditingkatkan seperti LL-HLS dan LL-Dash memiliki latensi 3 detik atau kurang. Ini masih dianggap cepat, dan cukup untuk sebagian besar kasus penggunaan latensi rendah. WebRTC, di sisi lain, tetap menjadi solusi tercepat jika kasus penggunaan Anda memerlukan streaming waktu nyata. Karena ini adalah protokol UDP yang dikembangkan untuk sepenuhnya beradaptasi dengan internet modern. Itu mendukung 500ms latensi real-time.
WebRTC dirancang untuk menyediakan komunikasi dua arah, waktu nyata. Tidak seperti HLS, yang didasarkan pada TCP, WEBRTC didasarkan pada UDP. Ini berarti bahwa WEBRTC dapat dimulai tanpa klien dan server menukar informasi jabat tangan. Akibatnya, WebRTC lebih cepat, tetapi juga membuatnya lebih rentan terhadap fluktuasi jaringan.
WebRTC adalah protokol yang harus digunakan jika solusi Anda membutuhkan streaming peer-to-peer, waktu nyata. Namun, jika Anda perlu menumbuhkan audiens di atas 50 orang, Anda harus mempertimbangkan kembali strategi Anda.
Dibandingkan dengan HLS, penskalaan WEBRTC secara substansial lebih sulit. Namun, ini dapat diselesaikan dengan alur kerja hibrida. Pilihan Anda akan ditentukan oleh kasus penggunaan Anda dan ukuran audiens target.
Ketika datang untuk menjangkau khalayak besar, protokol berbasis HTTP keluar di atas.
Apakah WebRTC menggunakan HTTP
Membuka koneksi TCP baru untuk setiap permintaan menjadi masalah saat web berkembang. Kami mulai membangun aplikasi lengkap alih -alih halaman web sederhana, dan jumlah media dan file yang diperlukan browser untuk diambil menjadi lebih. Bayangkan aplikasi web khas yang membutuhkan file HTML, CSS, dan JavaScript, serta berbagai gambar dan aset lainnya. Untuk setiap file, koneksi baru harus dibuat.
Streaming WebRTC vs HTTP
Возожно, ареса электронной почты явюю аонимныи дря дой говииииииamah дancing дзии дзпы дilat е ктнной почты частников, чтобы увидеть иходное собщение нandi.
-Diskusikan-Webrtc
Saya telah bereksperimen dengan protokol streaming WEBRTC dan HTTP (HLS, MPEG-dash) untuk streaming video langsung selama beberapa hari sekarang, dan telah menemukan bahwa sementara WEBRTC mencapai latensi kedua, protokol streaming HTTP selalu memiliki latensi multi-detik, HTTP memiliki latensi multi-detik, HTTP memiliki multi-detik, HTTP memiliki multi-detik, HTTP memiliki latensi multi-detik, HTTP memiliki multi-detik HTTP selalu memiliki multi-detik. Karena itu saya memiliki beberapa pertanyaan terkait dengan streaming WebRTC vs HTTP.
1. Bagaimana WebRTC dapat mencapai latensi sub kedua dibandingkan dengan protokol streaming HTTP?
2. Jika WebRTC sudah menyediakan streaming video latensi rendah, mengapa ada upaya untuk menyatukan protokol streaming HTTP di bawah standar MPEG-DASH?
3. Bagaimana WebRTC dibandingkan dengan RTMP? (Saya belum menjelajahi RTMP sampai sekarang, tetapi saya ingin tahu apakah mungkin untuk mencapai latensi sub-detik dengan RTMP)
Studi perbandingan antara streaming berbasis WEBRTC dan HTTP
Untuk waktu yang lama, menurunkan latensi streaming telah menjadi topik yang populer. Latensi puluhan detik, dan bahkan satu menit, telah diketahui terjadi dengan streaming berbasis HTTP di masa lalu. Dengan latensi siaran tradisional dalam detik satu digit dan solusi yang muncul seperti Layanan Pengembangan WebRTC , Pertanyaannya adalah pendekatan mana yang harus diambil. Streaming WebRTC mampu mengirimkan video tidak hanya di sub-detik, tetapi dalam waktu kurang dari 500 milidetik. Saat ini teknologi streaming latensi terendah yang tersedia, memungkinkan transmisi yang hampir seketika.
Dalam panduan bagus ini, kita akan melihat bagaimana WebRTC bekerja dan membandingkannya dengan http dari perspektif a Layanan streaming video . Ayo Memulai!
Ringkasan cepat streaming berbasis HTTP & WEBRTC
Protokol berbasis HTTP secara teknis adalah server web reguler yang mengirimkan unduhan progresif. Mereka menggunakan streaming bitrate adaptif untuk memberikan kualitas video setinggi mungkin dan pengalaman menonton, terlepas dari koneksi, perangkat lunak, atau perangkat. Beberapa protokol berbasis HTTP yang paling umum tersedia termasuk MPEG-Dash, Apple’S HLS, Adobe HDS, dan Microsoft Smooth Streaming.
WebRTC adalah protokol yang kuat yang didukung oleh alat yang sangat baik dan dukungan industri yang luas. Itu dibuat untuk memberikan aplikasi dengan kemampuan komunikasi real-time (RTC), memungkinkan video, audio, atau jenis data lainnya untuk ditransfer di antara rekan. Ini adalah perbedaan utama antara keduanya jika dibandingkan dengan streaming berbasis HTTP, yang berorientasi pada klien-server.
UDP vs. TCP
Komponen Dasar Protokol Internet, Pengguna Datagram Protocol (UDP) dan Transmission Control Protocol (TCP), keduanya berada di lapisan transportasi.
Perbedaan utama antara UDP dan TCP adalah bahwa TCP membutuhkan jabat tangan tiga arah saat mengirimkan data. Inisiator (klien) meminta agar akseptor (server) membuat koneksi, akseptor menjawab, dan inisiator mengakui respons dan mempertahankan sesi antara kedua ujungnya. Oleh karena itu, TCP sangat kredibel dan dapat menangani kehilangan paket dan pemesanan.
UDP, di sisi lain, tidak’t membutuhkan jabat tangan untuk memulai. Ini mentransfer data terlepas dari kendala bandwidth, yang membuatnya lebih cepat dan berisiko. Karena UDP tidak mendukung transmisi, pemesanan paket, atau pemeriksaan kesalahan, cegukan jaringan memiliki potensi untuk mencemari data dalam transit.
Protokol seperti WEBRTC sering menggunakan UDP, sedangkan protokol berbasis HTTP menggunakan TCP.
Bagaimana WebRTC menumpuk versus streaming berbasis http?
- Jenis latensi apa yang Anda cari?
- Berapa ukuran penonton?
- Berapa jumlah maksimum yang ingin Anda belanjakan?
Latensi
Jawaban atas pertanyaan latensi tergantung pada rentang latensi yang Anda tuju.
HLS baru dan ditingkatkan seperti LL-HLS dan LL-Dash memiliki latensi 3 detik atau kurang. Ini masih dianggap cepat, dan cukup untuk sebagian besar kasus penggunaan latensi rendah. WebRTC, di sisi lain, tetap menjadi solusi tercepat jika kasus penggunaan Anda memerlukan streaming waktu nyata. Karena ini adalah protokol UDP yang dikembangkan untuk sepenuhnya beradaptasi dengan internet modern. Itu mendukung 500ms latensi real-time.
WebRTC dirancang untuk menyediakan komunikasi dua arah, waktu nyata. Tidak seperti HLS, yang didasarkan pada TCP, WEBRTC didasarkan pada UDP. Ini berarti bahwa WEBRTC dapat dimulai tanpa klien dan server menukar informasi jabat tangan. Akibatnya, WebRTC lebih cepat, tetapi juga membuatnya lebih rentan terhadap fluktuasi jaringan.
WebRTC adalah protokol yang harus digunakan jika solusi Anda membutuhkan streaming peer-to-peer, waktu nyata. Namun, jika Anda perlu menumbuhkan audiens di atas 50 orang, Anda harus mempertimbangkan kembali strategi Anda.
Dibandingkan dengan HLS, penskalaan WEBRTC secara substansial lebih sulit. Namun, ini dapat diselesaikan dengan alur kerja hibrida. Pilihan Anda akan ditentukan oleh kasus penggunaan Anda dan ukuran audiens target.
Ketika datang untuk menjangkau khalayak besar, protokol berbasis HTTP keluar di atas. Ketika “CDN” Untuk WebRTC memang ada, biayanya sering menjadi penghalang.
Biaya
WebRTC adalah protokol yang gratis dan open-source. Tapi ingat bagaimana kita berbicara tentang penskalaan WebRTC? Ini sepenuhnya mungkin, dan bekerja secara efektif dalam banyak kasus penggunaan – tetapi tidak murah. Jika Anda tidak perlu streaming ke ratusan orang, WebRTC adalah pilihan yang bagus. Namun, jika Anda ingin menjangkau audiens yang besar, Anda harus menghabiskan uang untuk server tambahan untuk mengurangi beban di browser.
HLS mungkin merupakan metode pengiriman video yang paling hemat biaya. Penskalaan dengan CDN mudah dibenarkan dari sudut pandang biaya karena menggunakan infrastruktur HTTP yang terjangkau dan teknologi jaringan berbasis TCP saat ini.
Kesimpulan
Dalam beberapa tahun terakhir, protokol berbasis HTTP dan WEBRTC telah berjalan jauh. Terlepas dari kenyataannya, mereka berdua adalah teknologi mutakhir yang mendorong industri ke depan, masing-masing memiliki seperangkat keuntungan dan kerugiannya sendiri. Tidak ada pilihan yang ideal untuk semua orang, tetapi salah satunya mungkin yang paling cocok untuk Anda.
Pada akhirnya, protokol optimal akan ditentukan oleh karakteristik proyek Anda, perangkat yang akan didistribusikan, dan skala audiens Anda. Saat mengembangkan solusi latensi rendah, ingatlah hal-hal ini.
Penasaran tentang menemukan solusi terbaik untuk Anda? Hubungi Pakar Streaming Video Langsung kami!
HTTP, WebSocket, GRPC atau WEBRTC: Protokol komunikasi mana yang terbaik untuk aplikasi Anda?
Aktifkan uji coba gratis 30 hari Anda hari ini dan mulailah prototipe.
- Bangun obrolan video
- Apa itu SFU
- Protokol streaming video
- Konferensi video P2P
Bagikan artikel untuk:
Saat memilih protokol komunikasi untuk aplikasi Anda, ada banyak pilihan berbeda. Dalam posting ini, kami’Lihatlah empat solusi populer: Http, Websocket, grpc, Dan WEBRTC. Kami akan mengeksplorasi setiap protokol dengan menyelidiki teknologi di baliknya, apa itu’S paling baik digunakan untuk, dan kekuatan serta kelemahannya.
· Diterbitkan 26 Sep 2022
Bentuk komunikasi kami terus meningkat: semakin cepat, lebih nyaman, dan lebih dapat diandalkan. Komunikasi kami telah berevolusi dari mengirim pesan menggunakan merpati operator, ke surat pos, ke penemuan telepon rumah, ke email dan pesan teks dari perangkat kecil yang cocok di saku kami.
Di masa depan, kita bahkan dapat transisi pertemuan dan pesta ulang tahun ke VR (semoga, ini hanya lelucon!). Tetapi bentuk komunikasi terbaik akan selalu tergantung pada situasinya.
Pesan teks cepat terkadang lebih baik dari email yang panjang. Di lain waktu, panggilan video dengan tim adalah cara terbaik untuk bertukar informasi. Sebaliknya, dokumen asuransi penting harus dikirim melalui surat reguler dan dikirimkan secara hard copy.
Hal yang sama juga berlaku untuk teknologi web dan protokol yang kami gunakan. Aplikasi yang berbeda memiliki kebutuhan komunikasi yang berbeda.
Ringkasan
Dalam artikel ini, kami’ll mencakup beberapa populer protokol komunikasi kita dapat menggunakan sebagai pengembang dan mengeksplorasi pro dan kontra dari berbagai opsi. Tidak ada solusi yang lebih baik dari yang lain – hanya ada beberapa yang lebih baik untuk aplikasi atau masalah tertentu.
Beberapa aplikasi memerlukan koneksi peer-to-peer, dengan latensi rendah dan transfer data tinggi, dan dapat menerima beberapa paket (informasi) kerugian. Aplikasi lain dapat polling server berdasarkan kebutuhan dan don’t perlu menerima komunikasi dari rekan yang berbeda. Aplikasi lain membutuhkan komunikasi real-time dengan keandalan data.
Game multiplayer online, aplikasi pesan, situs web blog, aplikasi galeri media, dan perangkat lunak konferensi video semuanya memiliki berbagai tingkat komunikasi dan kebutuhan data.
Jika Anda membuat solusi streaming video maka ada pertimbangan lain juga, lihat artikel kami tentang protokol streaming video untuk informasi lebih lanjut tentang memilih yang benar.
Apa itu protokol komunikasi?
Di jaringan komputer, protokol adalah seperangkat aturan yang mengatur bagaimana data dipertukarkan antar perangkat. Protokol mendefinisikan aturan, sintaks, semantik, dan sinkronisasi komunikasi dan kemungkinan metode pemulihan kesalahan.
Protokol yang dibahas dalam artikel ini menentukan bagaimana perangkat lunak lapisan aplikasi akan berinteraksi satu sama lain. Protokol yang berbeda mematuhi aturan yang berbeda, dan itu’S penting untuk memahami kekuatan dan keterbatasan masing -masing. Di artikel ini, Anda’ll pelajari tentang protokol berikut:
Http (Hypertext Transfer Protocol) adalah protokol aplikasi untuk sistem informasi terdistribusi, kolaboratif, dan hypermedia. HTTP adalah fondasi komunikasi data untuk World Wide Web. Hypertext adalah teks terstruktur yang menggunakan tautan logis (hyperlinks) antara node yang mengandung teks. HTTP adalah protokol untuk bertukar atau mentransfer hypertext.
Http/2 dirancang untuk mengatasi kekurangan protokol HTTP asli dan untuk meningkatkan kinerja. HTTP/2 lebih cepat dan lebih efisien daripada HTTP/1.1, dan mendukung multiplexing untuk memungkinkan banyak permintaan dan respons untuk multiplexed dalam satu koneksi. Fitur penting lainnya termasuk kompresi header dan dorongan server. Dia’S secara bertahap menjadi protokol default untuk lalu lintas web.
Websocket adalah protokol yang memungkinkan komunikasi dua arah antara klien dan server. Ini adalah pilihan populer untuk aplikasi yang menangani data real-time, seperti aplikasi obrolan, game online, dan streaming data langsung.
grpc adalah kerangka kerja RPC open-source modern yang menggunakan HTTP/2 untuk transportasi. Ini adalah pilihan yang tepat untuk aplikasi yang perlu membuat banyak panggilan API kecil dan cepat. GRPC menghasilkan ikatan klien dan server lintas-platform untuk banyak bahasa, sehingga memungkinkan aplikasi klien untuk secara langsung memanggil metode pada aplikasi server pada mesin yang berbeda seolah-olah itu adalah objek lokal.
WEBRTC adalah teknologi yang memungkinkan komunikasi real-time antara klien dan memungkinkan untuk membuat koneksi peer-to-peer langsung. Ini digunakan untuk video, obrolan, berbagi file, dan aplikasi streaming video langsung.
Memahami TCP dan UDP
Sebelum mempelajari lapisan aplikasi yang disebutkan di atas, itu’S penting untuk memiliki pemahaman dasar tentang TCP dan UDP, dua lapisan transport yang mendasari yang memfasilitasi transfer data dengan cara yang berbeda secara fundamental.
TCP (Protokol Kontrol Transmisi) adalah standar yang mendefinisikan cara membangun dan mempertahankan percakapan jaringan melalui internet. TCP adalah protokol yang paling umum digunakan di Internet dan jaringan yang berorientasi koneksi. Saat Anda menelusuri web, komputer Anda mengirim paket TCP ke server web. Server web merespons dengan mengirim paket TCP kembali ke komputer Anda. Koneksi pertama kali dibuat antara dua perangkat sebelum data apa pun dipertukarkan, dan TCP menggunakan koreksi kesalahan untuk memastikan bahwa semua paket disampaikan dengan sukses. Jika sebuah paket hilang atau rusak, TCP akan mencoba mengirimkannya.
UDP (Protokol Datagram Pengguna) adalah protokol lapisan transport yang tidak dapat diandalkan dan tidak dapat diandalkan. Itu tidak memerlukan koneksi untuk dibuat atau dipelihara dan tidak menjamin bahwa pesan akan dikirimkan secara berurutan. Artinya ada beberapa kehilangan data jika suatu paket tidak dikirim atau jika itu’S rusak. UDP sering digunakan untuk media streaming atau aplikasi real-time di mana paket yang dijatuhkan kurang bermasalah daripada memastikan pengiriman.
Http/1
Dia’S penting untuk memiliki pemahaman dasar tentang dasar semua komunikasi berbasis internet dan transfer data di lapisan aplikasi – HTTP (Hypertext Transfer Protocol).
Memahami http/1 dan keterbatasannya juga akan menjadi penting sebelum kita dapat menjelajahi protokol lain secara lebih rinci dan sepenuhnya menghargai apa yang mereka berikan.
Dengan HTTP, klien dan server berkomunikasi dengan bertukar pesan individu. Pesan yang dikirim klien disebut permintaan, dan pesan yang dikirim oleh server disebut respons. Pesan -pesan ini dikirim sebagai pesan teks biasa melalui koneksi TCP. Mereka juga dapat dienkripsi menggunakan TLS dan dikirim menggunakan protokol HTTPS.
Klien biasanya akan menjadi browser web atau aplikasi yang berjalan pada pengguna’S telepon atau komputer, tetapi secara teknis bisa jadi apa saja, misalnya, skrip yang merangkak situs web.
Permintaan HTTP hanya dapat mengalir dalam satu arah, dari klien ke server. Tidak ada cara bagi server untuk memulai komunikasi dengan klien; itu hanya dapat menanggapi permintaan.
HTTP sangat cocok untuk aplikasi web dan klien tradisional, di mana informasi diambil berdasarkan kebutuhan. Misalnya, Anda menyegarkan halaman, dan permintaan dibuat ke server untuk mengambil informasi terbaru.
Namun, protokol ini diperluas dengan cara yang awalnya tidak dimaksudkan. Di bagian berikut, kami’LL Jelajahi beberapa http/1’Keterbatasan S.
Http/1 real-time
HTTP/1 tidak efisien saat pesan perlu dikirim secara real-time dari klien ke server dan sebaliknya. Misalnya, jika informasi baru tersedia di server yang perlu dibagikan dengan klien, transaksi ini hanya dapat terjadi setelah klien memulai permintaan.
Ada solusi untuk ini, menggunakan teknik yang disebut HTTP Short and Long Polling, serta Acara yang Sent Server.
Jajak pendapat pendek
HTTP Short Polling adalah teknik di mana klien berulang kali mengirimkan permintaan ke server sampai merespons dengan data baru. Setelah menerima data, ia memulai proses lagi dan berulang kali meminta sampai sesuatu yang lain tersedia.
Ini adalah strategi komunikasi real-time yang tidak efisien, karena membuang banyak sumber daya dengan terus mentransmisikan dan mem-parsing permintaan/tanggapan HTTP.
Jajak pendapat panjang
Dengan polling panjang HTTP, satu permintaan dibuat dari klien, dan kemudian server menjaga koneksi tetap terbuka sampai data baru tersedia dan respons dapat dikirim. Setelah klien menerima tanggapan, koneksi baru segera dibuat lagi.
Jajak pendapat yang panjang lebih efisien daripada jajak pendapat pendek tetapi bukan solusi yang optimal untuk komunikasi real-time.
Acara Sent Server (SSE)
Acara terkirim server memungkinkan klien untuk membuka koneksi dan menerima pembaruan (pesan push) dari server secara real-time, tanpa harus polling server untuk data baru terus-menerus. Ini adalah koneksi satu arah, jadi Anda tidak dapat mengirim acara dari klien ke server.
SSE adalah standar yang menjelaskan bagaimana server dapat memulai transmisi data ke klien setelah koneksi klien awal telah dibuat.
Masalah kinerja dengan http/1
Sebagian besar aliran data HTTP terdiri dari transfer data kecil dan bursty, sedangkan TCP dioptimalkan untuk koneksi berumur panjang dan transfer data curah. Waktu perjalanan pulang pergi jaringan adalah faktor pembatas dalam throughput dan kinerja TCP dalam banyak kasus. Akibatnya, latensi adalah kemacetan kinerja dan sebagian besar aplikasi web memberikannya.
Apa artinya di atas adalah bahwa TCP, yang digunakan HTTP, dibangun untuk menangani koneksi berumur panjang dan untuk mentransfer banyak data. HTTP/1, di sisi lain, akan membuka sekelompok koneksi TCP yang berumur pendek dan biasanya hanya mengirim kecil data.
Pemblokiran kepala-of-line
Masalah kinerja dengan http/1.0 adalah bahwa Anda harus membuka koneksi TCP baru untuk setiap permintaan/respons. Ini bukan masalah untuk apa yang awalnya diciptakan HTTP – untuk mengambil dokumen hiperteks. Bagian dokumen itu penting karena HTTP tidak dimaksudkan “Hypermedia”.
Membuka koneksi TCP baru untuk setiap permintaan menjadi masalah saat web berkembang. Kami mulai membangun aplikasi lengkap alih -alih halaman web sederhana, dan jumlah media dan file yang diperlukan browser untuk diambil menjadi lebih. Bayangkan aplikasi web khas yang membutuhkan file HTML, CSS, dan JavaScript, serta berbagai gambar dan aset lainnya. Untuk setiap file, koneksi baru harus dibuat.
Bersama datang http/1.1, yang memiliki koneksi persisten yang menentukan bahwa kita dapat memiliki lebih dari satu permintaan atau respons pada koneksi TCP yang sama.
Solusi ini jelas merupakan peningkatan, tetapi tidak mengizinkan server untuk merespons dengan beberapa respons secara bersamaan. Dia’S protokol serial tempat Anda harus mengirim permintaan dan menunggu tanggapannya, lalu kirim permintaan kedua dan sebagainya. Ini dikenal sebagai pemblokiran head-of-line.
Namun, dimungkinkan untuk mencapai paralelisme, karena browser dapat membuka hingga enam koneksi TCP ke asal yang sama – di mana “asal” didefinisikan sebagai kombinasi unik dari tuan rumah Dan pelabuhan nomor.
Misalnya, jika Anda memiliki aplikasi galeri foto yang perlu memuat 12 gambar, maka enam permintaan akan dibuat untuk memuat enam gambar pertama, dan setiap permintaan akan membuka koneksi TCP baru di bawah kap mesin. Enam gambar lainnya akan diblokir sampai respons diterima dan salah satu koneksi terbuka dapat digunakan untuk memuat gambar berikutnya. Six Open Open TCP Connections ke asal yang sama akan digunakan kembali saat tersedia, tetapi Anda terbatas pada enam koneksi aktif.
Secara alami, programmer menemukan solusi yang mudah – dengan mengubah asal. Alih -alih menampung semua aset pada asal yang sama, Anda meng -host enam gambar di satu asal dan sisanya di yang lain. Sekarang Anda dapat memiliki 12 permintaan simultan (atau membuka koneksi TCP). Ini disebut sebagai “Sharding”.
- Gambar-gambar 1-6 di -host pada 1.gambar-gambar.com
- Gambar-gambar 7-12 di -host pada 2.gambar-gambar.com
Ada batasan berapa kali Anda bisa melakukan ini, dan itu’sulit untuk menentukan jumlah pecahan yang optimal. Pada titik tertentu, menambahkan lebih banyak pecahan akan meningkatkan kompleksitas, menambah overhead, dan dapat mengakibatkan tautan menjadi padat dan paket hilang.
Ada juga kekhawatiran lain, karena setiap koneksi TCP menambahkan overhead yang tidak perlu ke server. Koneksi bersaing satu sama lain, setiap jabat tangan TCP dan TLS menambah biaya yang tidak perlu, dan sumber daya server/proxy lainnya harus digunakan untuk mempertahankan koneksi aktif. Ada batasan yang jelas dalam cara http/1 memanfaatkan koneksi TCP yang mendasarinya.
Header dan cookie kembung
Masalah lain adalah bahwa ketika spek http berkembang, lebih banyak header telah ditambahkan ke spesifikasi. Pengembang juga memiliki opsi untuk menambahkan cookie ke header, dan ini bisa sangat besar. Ini menambah banyak kembung, karena setiap permintaan dan respons perlu mengirimkan semua informasi teks ini, dan http/1.1 tidak termasuk mekanisme untuk mengompresi header dan metadata.
Jika Anda memerlukan protokol RPC berkinerja tinggi, overhead ini bertambah dengan cepat, dan HTTP tidak lagi merupakan solusi yang optimal.
Prioritas
Dengan http/1.1, browser “memprioritaskan” Sumber daya dengan memegang antrian prioritas pada klien dan mengambil tebakan berpendidikan tentang cara memanfaatkan koneksi TCP yang tersedia sebaik -baiknya. Browser telah menanamkan heuristik untuk menentukan sumber daya apa yang lebih berharga dari yang lain.
Misalnya, memuat CSS akan mengambil prioritas yang lebih tinggi daripada memuat gambar.
Masalahnya adalah tidak ada cara bagi Anda, sebagai pengembang, untuk memprioritaskan satu permintaan daripada yang lain atau untuk mengubah prioritas pesan yang sedang berlangsung. Konten apa yang dimuat terlebih dahulu hingga browser, dan Anda tidak memiliki suara dalam skema prioritas.
Http/2
HTTP/2 adalah versi yang lebih baik dari protokol HTTP dan membahas semua masalah kinerja yang diuraikan di atas dengan HTTP/1 dan menambahkan peningkatan lainnya tanpa mengubah salah satu semantik (kata kerja, header, dll).
Perubahan paling signifikan dalam HTTP/2 adalah penggunaan multiplexing untuk secara bersamaan mengirim dan menerima beberapa permintaan dan tanggapan HTTP atas a koneksi TCP tunggal. Semua koneksi HTTP/2 persisten, dan hanya satu koneksi per asal yang diperlukan. Ini memungkinkan penggunaan sumber daya jaringan yang jauh lebih efisien dan dapat secara signifikan meningkatkan kinerja aplikasi.
Beberapa manfaat lain dari http/2:
- Menggunakan kompresi header untuk mengurangi ukuran header, yang menghindari mengirim header teks biasa yang sama berulang kali. Ini secara signifikan mengurangi overhead permintaan/tanggapan dan jumlah data yang dikirim.
- Mengaktifkan prioritas, memungkinkan klien (pengembang) untuk menentukan prioritas sumber daya yang dibutuhkannya. Dia’s Juga mungkin untuk memperbarui prioritas permintaan yang sedang berlangsung – misalnya, pada gulir, jika gambar tidak lagi terlihat, prioritas dapat berubah.
- Menggunakan dorongan server untuk mengirim data ke klien sebelum memintanya. Ini dapat digunakan untuk meningkatkan waktu pemuatan dengan menghilangkan kebutuhan klien untuk membuat banyak permintaan.
Bagaimana cara kerja HTTP/2?
Unit protokol dasar di http/2 adalah a bingkai. Mekanisme pembingkaian biner baru ini mengubah bagaimana data dipertukarkan antara klien dan server.
Standar ini mendefinisikan sepuluh jenis bingkai yang berbeda, masing -masing melayani tujuan yang berbeda. Misalnya, header dan bingkai data membentuk dasar dari permintaan dan tanggapan HTTP:
A bingkai adalah unit komunikasi terkecil yang membawa jenis data tertentu.
Beberapa contoh bingkai lainnya adalah:
- Pengaturan: Pertukaran Pengaturan Informasi di awal atau selama koneksi.
- Prioritas: Penugasan kembali prioritas untuk pesan.
- Push_promise: Memungkinkan server untuk mendorong data kepada Anda – ini bertindak sebagai janji apa yang akan dikirim server. Misalnya, jika Anda meminta indeks.html, server dapat membuat push_promise yang menjanjikan untuk mendorong aplikasi.JS dan gaya.CSS, artinya klien tidak perlu meminta sumber daya tersebut.
Bingkai digabungkan untuk membentuk a pesan, Misalnya, header dan bingkai data pada gambar di atas. Ini sama dengan permintaan atau respons normal.
Lalu akhirnya, serangkaian pesan bisa menjadi bagian dari a sungai kecil. Ini memungkinkan untuk aliran data dua arah antara klien dan server dan permintaan penuh dan respons multiplexing.
Gambar di atas sedikit menyesatkan, memberikan kesan bahwa beberapa koneksi terbuka antara klien dan server. Tapi itu adalah koneksi TCP tunggal, dan data mengalir dengan bebas antara klien dan server dengan cara yang tidak blok.
Lapisan pembingkaian biner baru memungkinkan klien dan server untuk memecah pesan HTTP menjadi bingkai independen, menjalinnya, dan kemudian menyusun kembali mereka di ujung yang lain.
Ini hanya ringkasan bagaimana http/2.0 bekerja. Jika Anda ingin mempelajari lebih lanjut dan mengeksplorasi prioritas, dorongan server, dan kompresi header, lihat ini secara mendalam artikel. Untuk riwayat masalah http/1 dan bagaimana http/2 menyelesaikannya, tonton video ini.
Streaming data dua arah http/2
- Koneksi HTTP/2 tunggal dapat berisi beberapa aliran terbuka secara bersamaan, dengan kedua bingkai interleaving titik akhir dari beberapa aliran.
- Stream dapat ditetapkan dan digunakan secara sepihak atau dibagikan oleh klien atau server.
- Stream dapat ditutup oleh kedua titik akhir.
Ada banyak kesalahpahaman dengan fungsionalitas push server, yang memungkinkan server melalui http/2 untuk secara proaktif mengirim sumber daya yang menurut Anda mungkin perlu, misalnya, .JS dan .file css, tanpa klien memintanya. Ini tidak ada hubungannya dengan streaming dua arah dan hanya teknik optimasi web untuk sumber daya yang dapat di -cache.
Yang benar adalah bahwa dengan http/2 server bisa’t memulai a sungai kecil. Tetapi begitu klien membuka aliran dengan mengirimkan permintaan, kedua belah pihak dapat mengirim data bingkai di atas soket yang persisten kapan saja. Contoh yang sangat baik dari ini adalah GRPC, yang akan kita bahas nanti.
Dengan HTTP/2, dimungkinkan untuk mencapai streaming data dua arah, dan Anda bisa berpendapat bahwa itu’s Solusi yang lebih optimal daripada sesuatu seperti websockets, atau Anda bisa berpendapat bahwa itu tidak. Kami’Akan membahas hal ini secara lebih rinci di bagian WebSocket.
Websockets
Tujuan dari teknologi ini adalah untuk menyediakan mekanisme untuk aplikasi berbasis browser yang membutuhkan komunikasi dua arah dengan server yang tidak bergantung pada pembukaan beberapa koneksi HTTP (e.G., Menggunakan XmlHttpRequest atau iframe dan pemungutan suara panjang).
Websockets ditemukan untuk mengaktifkan komunikasi dupleks penuh antara klien dan server, yang memungkinkan data untuk melakukan perjalanan kedua cara segera melalui satu koneksi terbuka tunggal.
Setelah koneksi Websocket dibuat, klien tidak perlu polling server untuk pembaruan. Sebaliknya, komunikasi terjadi dua arah. Ini meningkatkan kecepatan dan kemampuan real-time dibandingkan dengan yang asli dan pendek dari HTTP/1. Websocket tidak memiliki format yang dipatuhi. Anda dapat mengirim data, teks, atau byte apa pun – fleksibilitas ini adalah salah satu alasan mengapa websockets populer.
Beberapa di antaranya mungkin terdengar akrab dengan apa yang kita bahas di bagian http/2, tapi itu’S penting untuk dicatat bahwa websockets ditemukan jauh sebelum http/2. Kami’ll bandingkan lebih lambat.
Bagaimana websockets bekerja
Websockets dijalankan secara efektif sebagai lapisan transportasi melalui TCP.
Untuk membuat koneksi WebSocket, klien dan server pertama -tama harus melakukan jabat tangan atas HTTP/1 yang normal.1 koneksi. Jabat tangan ini adalah jembatan dari http ke websockets.
Di bawah ini adalah contoh permintaan jabat tangan klien. Klien dapat menggunakan HTTP/1.1 Mekanisme disebut header upgrade untuk mengalihkan koneksi mereka dari HTTP ke WebSockets:
Dapatkan /mengobrol http /1.1 Host: Contoh.com: 8000 Upgrade: Websocket Connection: Upgrade SEC-WEBSOCKET-Key: DGHLIHHBXBSZSBUB25JZQ == SEC-WEBSOCKET-Versi: 13
Server kemudian akan menyimpulkan jabat tangan dengan respons khusus yang menunjukkan protokol akan berubah dari HTTP ke WebSocket:
Http/1.1 101 Switching Protocol Upgrade: Koneksi Websocket: Tingkatkan SEC-WEBSOCKET-ACECCEP: S3PPLMBITXAQ9KYGZZHZRBK+XOO =
Websockets memerlukan pengidentifikasi sumber daya yang seragam (URI) dengan skema WS: // atau WSS: //. Skema WS: // digunakan untuk koneksi yang tidak terenkripsi, dan skema WSS: // digunakan untuk koneksi terenkripsi, mirip dengan bagaimana URL http menggunakan skema http: // atau https: // skema.
Setelah saluran komunikasi dua arah ditetapkan, klien dan server dapat mengirim pesan bolak-balik. Pesan -pesan ini dapat berupa apa saja dari data biner ke teks. Koneksi Websocket akan tetap terbuka sampai klien atau server terputus.
Websocket Multiplexing
Pada saat penulisan, protokol WebSocket tidak mendukung multiplexing bawaan. Kami membahas multiplexing di bagian http/2, dan kami belajar bahwa itu’S fitur bawaan untuk http/2, dan itu’S mungkin untuk memiliki beberapa aliran multipleks pada koneksi yang sama. Setiap aliran mendapatkan pengidentifikasi yang unik, dan semua bingkai yang dikirim memiliki ID yang terkait dengan aliran yang sesuai.
Tidak mendukung multiplexing berarti bahwa protokol WebSocket memerlukan koneksi transportasi baru untuk setiap koneksi WebSocket. Misalnya, beberapa klien yang berjalan di tab yang berbeda dari browser yang sama akan menghasilkan koneksi yang terpisah. Untuk memiliki multiplexing atas websockets biasanya adalah sesuatu yang perlu Anda terapkan sebagai pengembang atau mengandalkan plugin atau perpustakaan pihak ketiga.
WebSocket vs HTTP/2
Jadi, memiliki http/2 mengganti websockets? Jawaban singkatnya adalah tidak. Jawaban yang lebih lama adalah bahwa HTTP/2 memungkinkan streaming dua arah, dan sebagai hasilnya, websockets bukan satu -satunya/opsi terbaik. Http/2 sebagai spek melakukan lebih banyak pekerjaan untuk Anda dibandingkan dengan websockets. Ini memiliki multiplexing bawaan dan, dalam kebanyakan kasus, akan menghasilkan lebih sedikit koneksi TCP terbuka ke asal. Di sisi lain, websockets memberikan banyak kebebasan dan tidak membatasi bagaimana data dikirim antara klien dan server setelah koneksi dibuat. Namun, Anda perlu mengelola penyambungan kembali sendiri (atau mengandalkan perpustakaan yang melakukan ini untuk Anda).
Mana yang pada akhirnya lebih baik, dan di mana satu akan bekerja dan yang lainnya tidak akan, siap untuk diperdebatkan, dan artikel ini tidak memberikan jawaban yang bertentangan. Websockets menawarkan banyak fleksibilitas, dan sebagai standar yang mapan, itu sepenuhnya didukung oleh semua browser modern, dan ekosistem di sekitar pustaka klien dan server kuat.
Untuk diskusi yang lebih terperinci dan berpendapat, lihat pertanyaan Stack Overflow ini:
- Apakah http/2 membuat websocket usang
- Http/2 atau websockets untuk klien latensi rendah ke pesan server
- HTTP/2 vs Web-Sockets Untuk Streaming Pesan BIDIRECTIONAL
Ada juga RFC untuk memungkinkan mekanisme untuk menjalankan protokol WebSocket pada satu aliran koneksi HTTP/2.
Mampu Bootstrap Websockets dari HTTP/2 memungkinkan satu koneksi TCP dibagikan oleh kedua protokol dan memperluas penggunaan jaringan HTTP/2 yang lebih efisien ke Websockets.
Ini telah diimplementasikan di Chrome dan Firefox. Anda dapat membaca dokumen desain krom dan motivasi di sini.
Kapan Anda harus menggunakan websockets?
Websockets paling cocok untuk aplikasi yang membutuhkan komunikasi dua arah secara real-time dan ketika potongan-potongan kecil data perlu ditransmisikan dengan cepat, misalnya:
- Aplikasi obrolan
- Game multipemain
- Aplikasi Pengeditan Kolaboratif
- Ticker olahraga langsung
- Aplikasi Perdagangan Saham
- Feed aktivitas real-time
Secara kebetulan, ini adalah area di mana tim kami memiliki banyak pengalaman. Kami’RE Re secara luas menggunakan websockets untuk memberi daya pada obrolan dan aktivitas kami Infrastruktur.
Dukungan untuk websockets bagus dan telah didukung oleh browser utama dan klien untuk waktu yang lama, dan juga didokumentasikan dengan baik dan mudah digunakan. Namun, websockets tidak boleh digunakan secara berlebihan; Tergantung pada apa yang Anda inginkan, mungkin ada alternatif yang lebih baik.
Misalnya, Acara Terkirim Server (SSE) efisien di atas HTTP/2 dan mudah digunakan. SSE bukan sistem komunikasi dua arah; server secara sepihak mendorong data ke klien. Tetapi jika yang Anda butuhkan adalah cara bagi server untuk mengirim data ke klien, ini berpotensi merupakan pilihan yang lebih baik daripada menambahkan overhead Websockets. SSE juga kembali ke http/1.1 Saat http/2 tidak tersedia. Selain itu, klien (atau browser) mengelola koneksi untuk Anda dan mendukung koneksi ulang otomatis.
Jika koneksi di atas websockets hilang, tidak ada mekanisme yang disertakan untuk penyeimbangan beban atau untuk menghubungkan kembali. Ini harus diimplementasikan secara manual atau oleh perpustakaan pihak ketiga.
grpc
GRPC adalah kerangka kerja Prosedur Remote Call (RPC) modern Source High Source yang dapat berjalan di lingkungan apa pun. Ini dapat secara efisien menghubungkan layanan di dan di seluruh pusat data dengan dukungan pluggable untuk penyeimbangan beban, penelusuran, pemeriksaan kesehatan dan otentikasi. Ini juga berlaku dalam mil terakhir dari komputasi terdistribusi untuk menghubungkan perangkat, aplikasi seluler dan browser ke layanan backend.
GRPC adalah sistem RPC open-source, berbasis kontrak, awalnya dikembangkan di Google. GRPC memungkinkan aplikasi untuk berkomunikasi secara transparan dan menyederhanakan pembangunan sistem yang terhubung.
Ini menghasilkan ikatan klien dan server lintas-platform untuk banyak bahasa, memungkinkan aplikasi klien untuk secara langsung memanggil metode pada aplikasi server pada mesin yang berbeda seolah-olah itu adalah objek lokal.
Dibangun di atas fitur HTTP/2, GRPC memanfaatkan fitur seperti streaming dua arah dan keamanan lapisan transportasi bawaan (TLS).
Motivasi GRPC
Dia’S penting untuk menyelami motivasi di balik GRPC dan mengapa diciptakan untuk memahami manfaatnya. Mengapa tidak menggunakan teknologi yang sudah ada yang sudah kita miliki: http/2 dan websockets, misalnya? Mengapa kita membutuhkan lapisan abstraksi lain di atas apa yang sudah kita miliki?
Ada berbagai cara data dapat disusun dan dikirim melalui internet. Beberapa contoh populer adalah sabun, istirahat dan graphql. Anda bahkan dapat membuat protokol sendiri, mengirim data melalui TCP mentah, dan menangani sendiri implementasi jika Anda mau.
Tetapi apa pun yang Anda pilih sebagai protokol komunikasi Anda, masalahnya adalah Anda perlu memastikan bahwa klien dan server menyetujui protokol. Misalnya, jika Anda’kembali membangun API REST, perpustakaan klien yang perlu Anda gunakan untuk mengirim data istirahat adalah perpustakaan HTTP. Perpustakaan HTTP dibangun ke dalam browser secara default, dan browser menangani segalanya untuk Anda:
- Itu membangun komunikasi dengan server.
- Ini menangani http/2 dan fallback ke http/1. Dan perlu mendukung HTTP/3 di masa mendatang.
- Itu menangani TLS dan menegosiasikan protokol.
- Itu menangani header, aliran, dan yang lainnya.
Tapi bagaimana jika Anda’tidak di browser? Bagaimana jika kamu’Re Aplikasi Python yang berjalan di beberapa server, Golang CLI, atau aplikasi Flutter yang berjalan di iOS? Semua klien ini membutuhkan perpustakaan HTTP mereka sendiri yang memahami protokol yang Anda komunikasikan.
Untungnya, banyak orang yang berdedikasi sedang mengerjakan berbagai perpustakaan HTTP untuk semua bahasa dan kerangka kerja ini. Beberapa bahasa bahkan memiliki beberapa perpustakaan HTTP dengan fitur yang berbeda. Semua ini, bagaimanapun, datang dengan biaya – dan itu adalah pemeliharaan.
Biaya ini dapat memengaruhi Anda jika Anda harus, misalnya, meningkatkan server Anda ke http/2 jika perpustakaan Golang yang Anda gunakan mendukungnya. Tetapi, pada klien Python front-end Anda, perpustakaan HTTP yang setara belum mengimplementasikan http/2 atau mungkin tidak lagi dipertahankan. Perpustakaan HTTP yang berbeda dalam bahasa lain tidak dapat dibandingkan 1: 1.
Seiring berkembangnya spesifikasi HTTP, perpustakaan ini harus mengikuti kemajuan, masalah keamanan, fitur baru, dan tambalan lainnya. HTTP hanyalah sebuah contoh, dan hal yang sama berlaku untuk protokol WebSocket atau lainnya. Sesuatu mungkin diterapkan dengan baik di browser utama, tetapi fungsi itu harus diangkut ke beberapa bahasa dan kerangka kerja yang berbeda.
Bagaimana GRPC berbeda?
GRPC mencoba untuk menyelesaikan masalah ini dengan mempertahankan perpustakaan untuk bahasa populer itu sendiri, yang berarti bahwa fitur baru yang ditambahkan akan didukung oleh semua bahasa ini.
Di bawah kap, GRPC menggunakan HTTP/2 sebagai protokolnya, namun, implementasi ini tersembunyi dari Anda. Di masa depan, pengelola GRPC dapat dengan mudah menggantikan HTTP/2 dengan HTTP/3, dan Anda akan segera mendapat manfaat dari perubahan itu.
GRPC juga menggunakan buffer protokol sebagai Bahasa Definisi Antarmuka (IDL) dan format pertukaran pesan yang mendasarinya. Format ini netral bahasa dan memungkinkan untuk dengan mudah berkomunikasi antara berbagai bahasa pemrograman. Kami’LL Jelajahi konsep ini lebih lanjut di bagian selanjutnya.
Apa itu buffer protokol?
Protokol Buffer adalah mekanisme yang dapat diperpanjang oleh bahasa Google, platform-netral, yang dapat diperluas untuk membuat serial data terstruktur-pikirkan XML, tetapi lebih kecil, lebih cepat, dan lebih sederhana. Anda mendefinisikan bagaimana Anda ingin data Anda disusun sekali. Kemudian Anda dapat menggunakan kode sumber yang dihasilkan khusus untuk dengan mudah menulis dan membaca data terstruktur Anda ke dan dari berbagai aliran data dan menggunakan berbagai bahasa.
Secara tradisional dengan API, Anda tidak’t memiliki kontrak yang ditentukan oleh protokol itu sendiri. Misalnya, jika Anda’Re menggunakan istirahat, Anda’biasanya hanya mengirim pesan JSON dengan pasangan kunci/nilai itu’t diperiksa sampai pesan di ujung penerima. Pesan ini biasanya bisa apa saja, dan itu’Terserah Anda untuk memastikan struktur yang benar didefinisikan.
Lihatlah muatan JSON berikut:
‘pengenal’: 123 ‘nama’: ‘Gordon’, ‘surel’: ‘Gordon@di suatu tempat.io’
Setelah data ini diterima di klien/server, itu dapat dihapus menjadi objek, misalnya:
orang kelas
Namun, terserah Anda sebagai pengembang untuk mengimplementasikan serialisasi dan logika deserilisasi yang benar untuk muatan yang disebutkan di atas – ini mungkin melibatkan penulisan metode TOJSON dan FromJSON secara manual, mengandalkan pembuatan kode, atau itu bisa menjadi fitur bawaan dari bahasa Anda’menggunakan kembali.
Terlepas dari bagaimana Anda membuat serial data ini, kode yang mendasarinya perlu diperbarui secara manual, berpotensi di berbagai lingkungan, jika skema berubah.
Dengan buffer protokol, Anda membuat skema yang mendefinisikan jenis objek untuk bidang dan menentukan mana yang diperlukan dan mana yang opsional:
// pesan permintaan yang berisi orang tersebut’S Pesan Informasi Orang < optional int32 required string name = 2; optional string email = 3; >// pesan respons yang berisi pesan salam Helloreply
Anda kemudian dapat menentukan prosedur yang ingin Anda ungkapkan.
// definisi layanan ucapan. Layanan penyambut < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>
Begitu Anda’ve Menentukan Struktur Data dan Skema, Anda menggunakan Protokol Buffer Compiler Protoc untuk menghasilkan kelas akses data dalam bahasa pilihan Anda dari definisi proto Anda.
Ini akan menjadi antarmuka yang menggambarkan objek yang diuraikan dalam file proto, dengan aksesor untuk setiap bidang, serta metode untuk membuat serialisasi/menguraikan seluruh struktur ke/dari byte mentah.
Mode GRPC
Ada empat moda transportasi melalui GRPC. Keempat mode ini mereplikasi perilaku yang kita bahas sebelumnya, misalnya, permintaan/respons normal, SSE, dan websockets.
RPC Unary
RPC unary adalah permintaan dan respons sederhana, mirip dengan memanggil fungsi. Klien meminta beberapa data, dan server melakukan beberapa pemrosesan dan mengembalikan data itu.
RPC streaming server
RPC streaming server di mana klien mengirimkan satu permintaan ke server dan mengharapkan beberapa atau aliran respons. Klien membaca dari aliran yang dikembalikan sampai tidak ada lagi pesan.
Contohnya adalah streaming video, di mana Anda meminta untuk memuat video, dan server merespons dengan streaming video.
RPC streaming klien
RPC streaming klien di mana klien menulis urutan pesan dan mengirimkannya ke server, sekali lagi menggunakan aliran yang disediakan. Setelah klien selesai menulis pesan, ia menunggu server membacanya dan mengembalikan tanggapannya.
Contohnya adalah mengunggah file besar ke server dan setelah semua data dikirim, klien dapat mengirim pesan akhir untuk menunjukkan bahwa unggahan selesai, dan server dapat merespons secara opsional.
RPC aliran dua arah
Kombinasi streaming klien dan server. Aplikasi obrolan atau video game multipemain adalah contoh di mana data perlu mengalir antara klien dan server secara bebas.
RPC streaming dua arah di mana kedua belah pihak mengirim urutan pesan menggunakan aliran baca-tulis. Kedua aliran beroperasi secara mandiri, sehingga klien dan server dapat membaca dan menulis dalam urutan apa pun yang mereka sukai.
Dalam RPC streaming dua arah, panggilan tersebut diprakarsai oleh klien yang memohon metode tersebut. Pemrosesan aliran sisi klien dan server spesifik aplikasi. Karena kedua alirannya independen, klien dan server dapat membaca dan menulis pesan dalam urutan apa pun.
Layanan Mikro
Contoh yang baik di mana GRPC sangat kuat berada dalam layanan microser.
Dalam contoh ini, kami memiliki layanan mikro yang ditulis dalam Python, Java, dan Golang. Ini perlu mengirim data di antara mereka sendiri.
Menggunakan http/1.1 dan JSON akan meminta Anda untuk mengimplementasikan koneksi HTTP dan serialisasi untuk setiap bahasa. Anda juga perlu memastikan bahwa skema diimplementasikan dengan benar untuk setiap bahasa, dan jika API berubah, semua layanan perlu diperbarui secara manual.
GRPC, di sisi lain, menangani implementasi HTTP/2.0 Protokol untuk kami. Satu skema ditulis, dan kode yang sesuai dapat dihasilkan untuk semua bahasa yang digunakan. Skema ini dapat dilihat sebagai kontrak yang perlu dipatuhi semua bahasa, membuat berkomunikasi antara layanan ini jauh lebih mudah dan lebih dapat diandalkan.
Kinerja GRPC
GRPC cepat dan umumnya jauh lebih berkinerja daripada yang setara:
- Buffer protokol diserialisasi dan dikirim sebagai binari di atas kawat, yang secara signifikan lebih kecil dari pesan JSON normal.
- GRPC menggunakan http/2.0 yang memberikan perbaikan lebih lanjut
GRPC secara efisien mengompresi data yang dikirim memiliki keuntungan yang signifikan, karena semakin kecil payload data yang dikirimkan, semakin sedikit perjalanan pulang pergi TCP. Unit transmisi maksimum (MTU) adalah pengukuran yang mewakili paket data terbesar yang akan diterima oleh perangkat yang terhubung dengan jaringan, yaitu 1.500 byte.
Kompresi ditangani untuk Anda, dan Anda mendapat manfaat hanya dengan menggunakan GRPC. Sebagai alternatif, dimungkinkan untuk menggunakan sesuatu seperti GZIP untuk mengompres pesan JSON sebelum mengirimkan HTTP biasa. Namun, ini bisa tidak nyaman dan menambahkan lapisan kompleksitas. Bahasa dan lingkungan yang berbeda juga dapat memiliki tingkat dukungan yang berbeda untuk GZIP dan alat kompresi setara lainnya. Dan untuk setiap bahasa yang Anda gunakan, Anda perlu menerapkan kembali kompresi dan logika komunikasi yang benar sendiri. Ini adalah masalah yang mirip dengan apa yang kita bahas tentang perpustakaan http.
Kapan Anda harus menggunakan GRPC?
Jika kamu’menggunakan beberapa bahasa pemrograman yang berbeda yang perlu diintegrasikan dengan erat satu sama lain, dan membutuhkan komunikasi yang cepat dan sering yang mengirimkan banyak data, maka GRPC akan sempurna.
- Dengan streaming GRPC, itu’S mungkin untuk menentukan kemajuan unggahan/unduhan dengan mudah – tanpa perlu membuat permintaan yang tidak perlu untuk pembaruan.
- Dia’S mungkin untuk membatalkan permintaan.
- Semua manfaat http/2.
- Jika GRPC mendukung bahasa Anda, Anda tidak’Aku perlu khawatir tentang perpustakaan eksternal.
- GRPC tidak mendukung semua bahasa.
- Skema ini mungkin terasa ketat dan rumit.
- Bisa rumit untuk diatur dibandingkan dengan websockets.
- Masih muda dan kesalahan mungkin sulit untuk debug.
- Komunikasi dengan GRPC tidak secara native bekerja di luar kotak dengan browser web. Anda perlu menggunakan Perpustakaan GRPC-WEB.
WEBRTC
Protokol WebRTC adalah proyek open-source gratis yang menyediakan kemampuan komunikasi real-time (RTC) untuk aplikasi Anda yang berfungsi di atas standar terbuka. Ini mendukung data video, suara, dan generik yang dikirim di antara rekan.
Teknologi ini tersedia sebagai satu set JavaScript API untuk semua browser utama dan perpustakaan untuk klien asli seperti aplikasi Android dan iOS.
WebRTC berbeda dari WebSockets dan GRPC secara mendasar, dan bahwa begitu koneksi dibuat, data dapat (dalam beberapa keadaan) ditransmisikan langsung antara browser dan perangkat secara real time tanpa menyentuh server.
Ini mengurangi latensi dan membuat WebRTC bagus untuk audio, video, atau berbagi layar – di mana latensi rendah penting dan banyak data perlu dikirim.
Motivasi WebRTC
WebRTC bermaksud untuk membakukan bagaimana media, seperti audio dan video, dikomunikasikan di atas kawat-dan untuk mencapai hal ini dengan nyaman dengan API yang mudah digunakan.
Solusi lain, seperti websockets, memungkinkan untuk mengirimkan data apa pun di antara dua rekan; Namun, data ini perlu ditransmisikan melalui proxy atau server. Mengandalkan server lain menambah latensi, karena segala sesuatu yang dikirim melalui itu perlu dilihat, diproses, dan didekripsi. Ada perantara di antara kedua rekan. Untuk streaming video atau bahkan obrolan real-time, latensi ini tidak diinginkan.
Browser juga lebih kuat sekarang daripada beberapa tahun yang lalu. Browser memiliki akses ke webcam dan mikrofon, membutuhkan API bawaan dan cara mudah untuk mengirimkan informasi yang kaya ini. WebRTC dimaksudkan untuk menyederhanakan seluruh proses ini dan mengekspos API yang mudah digunakan secara asli tersedia di browser.
Masalah dengan WebRTC
Motivasi didefinisikan, dan sepertinya WEBRTC adalah solusi magis yang memungkinkan komunikasi yang lebih cepat antara dua teman. Tapi sayangnya ada beberapa masalah.
Masalah pertama adalah membangun koneksi peer-to-peer tidak sederhana-internet rumit, dan ada banyak router, proxy, dan firewall antara Alice di California dan Ben di Afrika Selatan. Dan dalam beberapa keadaan, mungkin tidak mungkin memiliki garis langsung antara dua rekan. Koneksi antara dua rekan mungkin perlu memotong firewall yang mencegah koneksi terbuka, Anda berpotensi tidak memiliki alamat IP publik, atau router mungkin tidak mengizinkan koneksi langsung antara rekan.
Masalah kedua adalah bahwa perlu ada cara bagi dua rekan untuk menemukan satu sama lain dan menentukan rute optimal di mana komunikasi dapat terjadi. Ini membutuhkan informasi tertentu untuk dibagikan antara kedua klien sebelum mereka dapat mengetahui cara terbaik berkomunikasi satu sama lain – dan cara umum untuk berbagi informasi ini adalah dengan menggunakan WebSockets.
Yang sedikit lucu. Sebuah Http Koneksi ditingkatkan ke a Websocket koneksi hanya untuk berbagi informasi untuk membangun a WEBRTC koneksi.
Jika Anda benar -benar ingin menghargai apa yang WebRTC lakukan dan kompleksitasnya, Anda harus terbiasa dengan beberapa istilah yang berpotensi tidak dikenal: Nat, Stun, Turn, Ice, SDP, dan Signaling.
Bagaimana cara kerja WEBRTC?
Dalam ikhtisar di atas, kami menggambarkan motivasi WebRTC, yang menjelaskan ide dasar tentang cara kerjanya. Bagian ini akan menyelami beberapa topik tingkat bawah yang perlu Anda pahami untuk memahami WebRTC sepenuhnya.
Terjemahan Alamat Jaringan (NAT)
Memahami apa itu Nat dan cara kerjanya sangat penting untuk memahami WebRTC.
NAT digunakan untuk memberikan perangkat Anda (laptop atau ponsel) alamat IP publik; Ini penting karena kami ingin membangun hubungan antara dua teman yang mungkin keduanya di belakang router. Router akan memiliki alamat IP publik, dan setiap perangkat yang terhubung ke router akan memiliki alamat IP pribadi.
Perangkat ini tidak’t Langsung terpapar ke internet. Sebaliknya, semua lalu lintas melewati router, yang berkomunikasi dengan dunia luar. Saat Anda meminta sumber daya dari server jarak jauh, router bertanggung jawab “rute” Permintaan dari mesin lokal Anda ke server itu dan merutekan respons dari server kembali ke mesin lokal Anda.
Permintaan ini diterjemahkan dari perangkat’Alamat IP pribadi ke router’S IP publik dengan port unik – yang kemudian disimpan di tabel NAT. Dengan cara ini, memiliki IP publik yang unik untuk setiap perangkat di jaringan lokal tidak diperlukan.
Gambar di atas adalah contoh sederhana dari seperti apa tabel nat nantinya. Membiarkan’s Berpura -pura perangkat lokal, dengan IP pribadi 192.168.1.50, meminta alamat publik 82.88.31.26:80 untuk beberapa data.
Ini dilakukan oleh perangkat lokal terlebih dahulu mengirimkan permintaan ke router, yang merutekan permintaan ke perangkat jarak jauh. Router kemudian memberi tahu perangkat jarak jauh untuk mengirim respons ke alamat IP eksternal, dengan port unik, yang dalam contoh ini adalah 86.88.71.25: 8830.
Port unik ini penting karena memungkinkan router untuk menentukan perangkat lokal mana yang membuat permintaan. Semua informasi ini disimpan di tabel NAT. Setelah router mendapat respons, ia dapat melakukan pencarian dan memutuskan perangkat lokal mana responsnya harus diteruskan.
Ini cukup sederhana untuk dipahami ketika kami memiliki pasangan permintaan/respons normal – satu perangkat dan satu server. Tetapi apa yang terjadi jika perangkat eksternal lain dengan alamat IP yang sama sekali berbeda memutuskan untuk mengirim paket ke alamat IP eksternal router pada port yang sama yang sebelumnya digunakan? Jika router meneruskannya ke perangkat lokal yang dipetakan ke nomor port itu?
Keputusan ini tergantung pada terjemahan NAT mana yang digunakan router dan pada akhirnya menentukan apakah koneksi peer-to-peer dapat dibuat. Bergantung pada router yang Anda gunakan, itu akan menerapkan terjemahan NAT yang berbeda. Ada empat metode terjemahan NAT yang berbeda:
- Nat satu-ke-satu
- Alamat dibatasi nat
- Port dibatasi nat
- Nat simetris
Nat satu-ke-satu: Peta satu alamat IP eksternal dan port (biasanya publik) ke satu alamat IP internal dan port (biasanya pribadi). Dalam contoh di atas, jika router menerima respons di port 8830 dan IP eksternal 86.88.71.25, itu akan meneruskannya ke perangkat lokal 192.168.1.50, Karena itu adalah perangkat lokal yang membuat permintaan (informasi yang diambil dari tabel NAT). Router tidak peduli dengan IP tujuan atau dari mana tanggapan berasal dari. Jika’s pada port eksternal tertentu ia pergi ke perangkat lokal itu.
Alamat dibatasi nat: Perangkat jarak jauh dapat mengirim paket ke perangkat lokal hanya jika perangkat lokal sebelumnya telah mengirim paket ke alamat IP jarak jauh. Singkatnya, kami hanya mengizinkannya jika kami telah berkomunikasi dengan host ini sebelumnya. Dalam contoh di atas, hanya mengizinkan paket dari 86.88.71.25.
Port dibatasi nat: Sama seperti alamat yang dibatasi NAT, tetapi pembatasan juga termasuk nomor port. Perangkat jarak jauh hanya dapat mengirim paket ke perangkat internal jika perangkat internal sebelumnya telah mengirim paket ke alamat IP X dan port p. Dalam contoh di atas, hanya izinkan dari 86.88.71.25 dan port 80.
Nat simetris: Yang paling membatasi. Untuk ini IP eksternal, port eksternal, IP tujuan, Dan Port tujuan Semua harus mencocokkan apa yang ada di tabel NAT. Ini berarti bahwa paket hanya dapat dikirim ke port tertentu dari perangkat lokal jika perangkat itu adalah yang meminta IP dan port tujuan.
WebRTC tidak bekerja melalui Nat simetris, dan untuk memahami mengapa kita perlu memahami apa itu server setrum.
Utilitas Traversal Sesi untuk NAT (Stun)
Stun adalah protokol untuk memberi tahu Anda alamat IP/port publik Anda melalui NAT dan untuk menentukan batasan apa pun di router Anda yang akan mencegah koneksi langsung dengan rekan. Server setrum adalah mekanisme bagi klien untuk menemukan keberadaan NAT, serta jenis NAT, dan untuk menentukan alamat IP eksternal NAT dan pemetaan port.
Tujuan dari permintaan setrum adalah untuk menentukan kehadiran publik Anda sehingga kehadiran publik ini kemudian dapat dikomunikasikan dengan orang lain sehingga mereka dapat terhubung dengan Anda – komunikasi ini disebut sebagai pensinyalan, yang akan kita bahas lebih banyak nanti.
Itu berfungsi untuk satu-ke-satu, alamat dibatasi, Dan port dibatasi nat. Tetapi tidak berhasil Nat simetris. Karena ketika Anda meminta server stun untuk informasi publik Anda, pasangan komunikasi itu dibuat khusus untuk klien yang membuat permintaan. Tidak mungkin untuk melibatkan rekan lain menggunakan NAT Symmetric – komunikasi melalui port perangkat lokal terbatas pada server setrum.
Server setrum ringan dan murah untuk dipertahankan. Ada server public yang bisa ditanyai secara gratis.
Gambar di bawah ini menggambarkan kapan stun bekerja dan kapan koneksi peer-to-peer dapat dibuat.
Di sisi lain, jika koneksi peer-to-peer tidak dapat dibuat, misalnya, ketika rekan berada di belakang NAT simetris-maka koneksi akhir pada langkah ketiga tidak akan diizinkan. Karena koneksi awal dibuat dengan server stun, dan tidak ada rekan lain yang dapat menggunakan info koneksi itu.
Dalam peristiwa seperti ini di mana koneksi langsung tidak dapat dibuat, kita perlu memanfaatkan server turn.
Traversal menggunakan relay di sekitar NAT (Turn)
Turn adalah protokol untuk menyampaikan lalu lintas jaringan ketika koneksi langsung tidak dapat dibuat antara dua rekan. Misalnya, jika satu rekan berada di belakang NAT simetris, server khusus diperlukan untuk menyampaikan lalu lintas di antara rekan. Dalam acara itu, Anda akan membuat koneksi dengan server turn dan memberi tahu semua rekan untuk mengirim paket ke server, yang kemudian akan diteruskan ke Anda.
Ini dilengkapi dengan overhead, dan server belokan bisa mahal untuk dipelihara dan dijalankan.
Gambar berikut menggambarkan bagaimana server turn digunakan untuk menyampaikan pesan antara dua atau lebih rekan.
Interactive Connectivity Establishment (ICE)
ICE menggunakan kombinasi protokol setrum dan putar untuk memberikan mekanisme bagi host untuk menemukan alamat IP publik masing -masing dan membuat koneksi langsung. Jika koneksi langsung tidak mungkin, ICE akan menggunakan giliran untuk membuat koneksi relai antara kedua host.
Semua cara yang mungkin untuk berpotensi membangun koneksi disebut kandidat es. Semua alamat yang dikumpulkan dikirim ke peer jarak jauh melalui SDP, yang akan kami jelajahi selanjutnya. WebRTC menggunakan informasi ini pada setiap klien untuk menentukan cara terbaik untuk terhubung ke rekan lain. Mungkin kedua rekannya berada di NAT yang sama dan bahwa koneksi lokal dapat dibuat, atau mungkin kedua rekan berada di belakang NAT simetris dan membutuhkan relai menggunakan server Turn.
Sesi Deskripsi Protokol (SDP)
SDP pada dasarnya adalah format data untuk menggambarkan sesi media untuk pengumuman sesi, undangan sesi, dan bentuk inisiasi sesi lainnya. Ini adalah standar untuk menggambarkan konten multimedia untuk koneksi, seperti resolusi, format, codec, dan enkripsi.
Yang penting, itu’S juga digunakan untuk menggambarkan kandidat ICE dan opsi jaringan lainnya. Saat Peer A ingin terhubung ke Peer B, mereka perlu berbagi informasi SDP untuk terhubung. Bagaimana SDP ini dibagikan sepenuhnya hingga – ini disebut sebagai pensinyalan dan kami akan menjelajahinya selanjutnya.
Signaling – membangun koneksi
Signaling adalah proses pengiriman informasi kontrol antara dua perangkat untuk menentukan protokol komunikasi, saluran, codec media dan format, dan metode transfer data, serta informasi perutean yang diperlukan. Hal terpenting untuk diketahui tentang proses pensinyalan untuk WEBRTC: Ini tidak didefinisikan dalam spesifikasi.
Koneksi peer berurusan dengan menghubungkan dua aplikasi di komputer yang berbeda. Koneksi dibuat melalui proses penemuan dan negosiasi yang disebut pensinyalan.
Peringatan penting adalah bahwa WebRTC tidak memiliki pensinyalan yang dibangun sebagai bagian dari spesifikasi, karena tidak mungkin bagi dua perangkat untuk saling menghubungi secara langsung, yang kami jelajahi secara rinci sebelumnya. Untuk dua rekan terhubung menggunakan WebRTC, mereka membutuhkan data SDP masing -masing.
Karena itu, terserah Anda, sebagai pengembang, untuk membangun cara bagi dua perangkat untuk membagikan informasi ini. Opsi yang populer adalah Websockets, atau informasi pensinyalan dapat dikirim bolak -balik melalui email atau dikirim dengan berjalan kaki dan dimasukkan secara manual untuk membuat koneksi.
Setelah informasi ini dibagikan, Anda memiliki semua yang Anda butuhkan untuk dua rekan untuk membuat koneksi WebRTC, itu mungkin koneksi langsung, atau mungkin melalui server Turn.
Kapan Anda harus menggunakan WEBRTC?
Anda bahkan dapat bertanya: mengapa saya harus menggunakan WebRTC? Tampaknya rumit untuk dipahami dan bahkan lebih rumit untuk diatur.
Rumit untuk diatur, tetapi ada banyak manfaat:
- API mudah digunakan dan tersedia langsung di browser Anda.
- Ini memiliki kinerja yang baik, memungkinkan untuk mengirimkan konten bandwidth tinggi, seperti video atau audio.
- Fitur yang lebih canggih, seperti berbagi layar dan berbagi file dapat dengan mudah diimplementasikan.
- Mendukung koneksi peer-to-peer dengan latensi yang berkurang.
- Sumber Gratis dan Terbuka.
- Tidak ada pensinyalan bawaan.
- Anda perlu mempertahankan setrum & mengubah server.
- Untuk koneksi grup (seperti panggilan video grup) SFU mungkin diperlukan.
- Rumit untuk diatur dan dipahami.
Yang harus Anda pilih?
Protokol yang Anda pilih akan tergantung pada kebutuhan spesifik Anda.
Http: Dengan http/2, sekarang dimungkinkan untuk memiliki komunikasi dua arah antara klien dan server. Bergantung pada aplikasi Anda, Anda mungkin tidak memerlukan komunikasi dupleks penuh dan sesuatu seperti SSE akan lebih dari cukup. Kami juga menemukan dalam artikel ini bahwa WebSockets dan GRPC bergantung pada HTTP, sementara WEBRTC memerlukan beberapa saluran lain untuk pensinyalan. Dia’S layak untuk dijelajahi terlebih dahulu jika HTTP memecahkan kebutuhan aplikasi Anda sebelum mempelajari protokol lain ini.
Websockets paling cocok untuk aplikasi real-time yang membutuhkan komunikasi dua arah, seperti aplikasi obrolan. Mereka juga relatif mudah diatur dan digunakan. Namun, websockets tidak seefisien GRPC atau WEBRTC, dan mereka tidak cocok untuk aplikasi yang perlu mengirim banyak data.
grpc adalah protokol yang lebih efisien daripada websockets, dan lebih cocok untuk aplikasi yang perlu mengirim banyak data. Namun, GRPC lebih rumit untuk diatur dan digunakan daripada websockets. Jika Anda perlu melakukan banyak panggilan API kecil, GRPC adalah pilihan yang baik. Atau, saat Anda menerapkan layanan mikro dengan berbagai bahasa pemrograman yang perlu berkomunikasi, lalu GRPC’Data terstruktur dan pembuatan kode serial akan menghemat banyak waktu. Dia’S juga perlu dicatat bahwa Anda bisa’t Mudah gunakan GRPC dari browser. Untuk itu, Anda memerlukan proxy khusus di backend Anda yang menerjemahkan panggilan – lihat grpc -web.
WEBRTC adalah protokol yang paling efisien untuk komunikasi real-time dengan latensi rendah antara browser dan perangkat, dan sangat cocok untuk aplikasi yang perlu mengirim banyak data. WebRTC juga menyediakan API yang mudah digunakan secara langsung tersedia di browser, membuatnya mudah untuk berbagi kamera, audio, layar, atau file lainnya Anda. Namun, WEBRTC dapat rumit untuk diatur dan digunakan karena mengharuskan Anda untuk melakukan pensinyalan dan mempertahankan belokan dan setrum server.
Kesimpulan
Masa depan akan melihat lebih banyak protokol, perubahan, dan perbaikan lebih lanjut. HTTP/3 sudah dirilis dan ada juga protokol komunikasi baru yang disebut WebTransport, pengganti potensial untuk WebSockets.
Kami harap Anda menemukan artikel ini bermanfaat dan itu akan membantu Anda membuat keputusan berdasarkan informasi. Jika Anda ingin melanjutkan diskusi, hubungi kami di Twitter atau LinkedIn.
WEBRTC vs HLS: Perbandingan antara protokol streaming
Posting blog ini membandingkan WebRTC dan HLS, dua protokol streaming paling populer. Ini memeriksa pro & kontra dari setiap protokol & mengeksplorasi aplikasinya. Selain itu, posting tersebut memberikan gambaran umum yang lebih baik untuk streaming, memungkinkan pembaca untuk memilih teknologi yang tepat untuk kebutuhan mereka.
Ashik TS
22 Februari 2023
Di era digital saat ini, protokol streaming menjadi penting untuk memakan dan berbagi media. Dari streaming langsung ke video sesuai permintaan, protokol streaming telah memungkinkan kami untuk mengakses konten di mana saja, kapan saja. Tetapi dengan begitu banyak pilihan yang tersedia, mengetahui mana yang terbaik untuk kebutuhan Anda dapat membutuhkan waktu dan usaha. Dalam artikel ini, kita akan melihat dua protokol streaming paling populer: WebRTC dan HLS, membandingkannya dan membantu Anda membuat keputusan berdasarkan informasi.
Apa itu WEBRTC?
WebRTC adalah protokol sumber terbuka dan open-source yang dikembangkan oleh W3C. Ini memungkinkan komunikasi real-time, seperti panggilan suara dan video, konferensi online, dan obrolan. WebRTC menjadi menonjol baru-baru ini karena kemampuannya untuk memberikan aliran video dan audio yang berkualitas tinggi dan berkualitas tinggi.
Aplikasi WEBRTC
Berikut adalah beberapa kasus penggunaan yang paling sering digunakan dari WebRTC:
- Panggilan Suara dan Video: Salah satu kasus penggunaan paling populer untuk WebRTC adalah panggilan suara dan video. Ini memungkinkan komunikasi latensi rendah waktu nyata antara dua atau lebih orang. Bisnis banyak menggunakan fitur ini untuk komunikasi internal, kolaborasi, dan aplikasi yang menghadap konsumen untuk jejaring sosial dan kencan online.
- Konferensi online: Kasus penggunaan populer lainnya untuk WebRTC adalah konferensi online. Ini memungkinkan banyak pengguna untuk bergabung dengan ruang pertemuan virtual dan berinteraksi satu sama lain melalui video dan audio, serta berbagi layar dan dokumen. Bisnis banyak menggunakan fitur ini untuk pertemuan dan presentasi jarak jauh, serta oleh lembaga pendidikan untuk kelas dan kuliah online.
- Mengobrol: WebRTC juga memungkinkan komunikasi berbasis teks real-time melalui obrolan. Fitur ini dapat diintegrasikan ke dalam berbagai aplikasi dan platform, seperti jejaring sosial, game online, dan dukungan pelanggan. Ini memungkinkan komunikasi instan dan dapat digunakan untuk meningkatkan pengalaman pengguna dalam berbagai konteks.
Apa itu HLS?
HLS (HTTP Live Streaming) adalah protokol streaming bitrate adaptif yang dikembangkan oleh Apple. Ini banyak digunakan untuk streaming langsung di perangkat seluler dan browser desktop. HLS dirancang untuk bekerja dengan protokol HTTP dan dapat dengan mudah diintegrasikan ke dalam infrastruktur berbasis HTTP yang ada.
Aplikasi HLS
Berikut adalah beberapa cara yang lebih umum HLS digunakan di zaman sekarang ini:
- Streaming Langsung: HLS banyak digunakan untuk acara streaming langsung, seperti olahraga, konser, dan siaran berita. Protokol ini dirancang untuk menangani lalu lintas tinggi dan memberikan pengalaman streaming yang lancar bagi pemirsa. Fitur bitrate adaptif memungkinkan aliran untuk menyesuaikan diri dengan koneksi internet pemirsa, memberikan pengalaman menonton yang lebih baik.
- Video-on-Demand (VOD): HLS juga biasa digunakan untuk konten video-on-demand (VOD), seperti film, acara TV, dan tutorial video. Protokol memungkinkan integrasi yang mudah dengan sistem manajemen konten dan pengalaman streaming yang lancar untuk penonton dengan bitrate adaptif.
- IPTV dan OTT: HLS juga digunakan dalam layanan IPTV dan over-the-top (OTT), seperti streaming televisi dan layanan video. Kemampuan protokol untuk menangani lalu lintas tinggi dan memberikan pengalaman streaming yang lancar menjadikannya pilihan yang populer untuk aplikasi ini.
- Streaming seluler: HLS juga populer untuk streaming seluler karena didukung pada platform iOS dan Android.
- Perusahaan Komunikasi: HLS digunakan di platform komunikasi perusahaan yang memungkinkan karyawan untuk melakukan streaming video, berbagi layar, dan melakukan panggilan audio/video karena memberikan pengalaman streaming yang lancar dan kompatibel dengan sebagian besar perangkat.
WEBRTC vs HLS: Perbandingan terperinci
Fitur | WEBRTC | HLS |
---|---|---|
Dukungan Browser | Chrome, Firefox, Safari, Edge (dengan plugin) | Safari, Chrome, Edge, Firefox (dengan plugin) |
Dukungan perangkat | Windows, MacOS, Linux, iOS, Android | iOS, Android, MacOS, Windows |
Dukungan codec | VP8, VP9, h.264, h.265 | H.264, h.265 |
Latensi | Rendah | Tinggi |
Keamanan | Tinggi | Sedang |
Kualitas video | Tinggi | Tinggi |
Metode Pengiriman | Peer-to-peer | Berbasis server |
Skalabilitas | Tinggi | Tinggi |
Kesesuaian | Terbatas | Lebar |
Saat memutuskan protokol mana yang akan digunakan, penting untuk mempertimbangkan faktor -faktor seperti latensi, keamanan, kualitas video, metode pengiriman, skalabilitas, dan kompatibilitas.
Latensi
Ketika datang ke latensi, WEBRTC memiliki keunggulan yang jelas dibandingkan HLS. WebRTC menggunakan komunikasi real-time, yang berarti video tersebut langsung dikirimkan ke penonton. Di sisi lain, HLS menggunakan mekanisme buffering, yang menunda pengiriman video. Tergantung pada kondisi jaringan, penundaan ini bisa di mana saja dari beberapa detik hingga beberapa menit. Elemen -elemen ini membuat WebRTC lebih cocok untuk kasus penggunaan yang membutuhkan latensi rendah, seperti obrolan video langsung dan game online.
Keamanan
Baik WebRTC dan HLS menggunakan enkripsi untuk mengamankan aliran video. Namun, tingkat keamanan yang diberikan oleh masing -masing protokol berbeda. WebRTC menggunakan protokol transportasi real-time yang aman (SRTP) untuk mengenkripsi aliran video, yang dianggap sebagai salah satu metode enkripsi paling aman. Di sisi lain, HLS menggunakan protokol HTTP Secure (HTTPS) untuk mengenkripsi aliran video. Sementara HTTPS dianggap aman, SRTP kurang aman. Karena alasan ini, WEBRTC lebih cocok untuk kasus penggunaan yang membutuhkan tingkat keamanan yang tinggi, seperti transaksi keuangan dan komunikasi pemerintah.
Kualitas video
Baik WebRTC dan HLS mampu memberikan video berkualitas tinggi. Namun, kualitas video yang dikirim oleh masing -masing protokol dapat bervariasi tergantung pada kondisi jaringan. WebRTC menggunakan streaming bitrate adaptif, yang menyesuaikan kualitas video secara real-time berdasarkan kondisi jaringan pemirsa. Ini berarti bahwa kualitas video akan tinggi bahkan di jaringan band-bander. Di sisi lain, HLS menggunakan mekanisme pengiriman video pra-segmentasi, yang dapat menyebabkan buffering dan gagap di jaringan band-banding rendah. Akibatnya, WEBRTC lebih cocok untuk kasus penggunaan yang memerlukan video berkualitas tinggi di jaringan band-bander.
Metode Pengiriman
WebRTC dan HLS menggunakan metode pengiriman yang berbeda untuk streaming video. WebRTC menggunakan metode pengiriman peer-to-peer (P2P), yang berarti bahwa video dikirim langsung dari satu penampil ke penampil lainnya. Ini mengurangi beban server dan meningkatkan skalabilitas aliran video. Di sisi lain, HLS menggunakan metode pengiriman klien-server, yang berarti bahwa video dikirim dari server ke penampil. Ini dapat menyebabkan masalah skalabilitas, terutama selama waktu lalu lintas puncak. Akibatnya, WEBRTC lebih cocok untuk kasus penggunaan yang membutuhkan skalabilitas tinggi, seperti acara langsung dan permainan online.
Skalabilitas
WebRTC dan HLS memiliki karakteristik skalabilitas yang berbeda. WebRTC menggunakan metode pengiriman P2P, yang mengurangi beban server dan meningkatkan skalabilitas aliran video. Di sisi lain, HLS menggunakan metode pengiriman klien-server, yang dapat menyebabkan masalah skalabilitas, terutama selama waktu lalu lintas puncak. Akibatnya, WEBRTC lebih cocok untuk kasus penggunaan yang membutuhkan skalabilitas tinggi, seperti acara langsung dan permainan online.
Kesesuaian
WebRTC dan HLS memiliki karakteristik kompatibilitas yang berbeda. WebRTC kompatibel dengan sebagian besar browser modern, termasuk Chrome, Firefox, dan Safari. Namun, itu tidak kompatibel dengan penjelajah internet dan edge. Di sisi lain, HLS kompatibel dengan sebagian besar browser modern, termasuk Chrome, Firefox, Safari, Internet Explorer, dan Edge. Karena itu, HLS lebih cocok untuk kasus penggunaan yang membutuhkan kompatibilitas dengan berbagai browser dan perangkat.
WEBRTC vs HLS: Mana yang lebih baik?
WEBRTC adalah pilihan yang bagus untuk aplikasi streaming latensi rendah dan real-time. Ini sangat cocok untuk menggunakan kasus seperti panggilan suara dan video, konferensi online, dan obrolan. Di samping itu, HLS adalah pilihan yang sangat baik untuk streaming video langsung ke audiens yang besar. Ini sangat cocok untuk kasus penggunaan seperti streaming olahraga langsung, konser, dan acara lain yang membutuhkan skalabilitas tinggi. Kemampuan HLS untuk beradaptasi dengan kondisi jaringan yang berbeda menjadikannya pilihan populer untuk streaming konten kepada pemirsa di berbagai perangkat dan jaringan.
Selain itu, HLS memiliki dukungan yang lebih baik untuk melindungi hak cipta konten, menjadikannya pilihan yang disukai untuk streaming konten premium. Ketika datang ke kompatibilitas, HLS memiliki sedikit keunggulan di atas WebRTC. HLS didukung secara luas, menjadikannya pilihan yang lebih fleksibel untuk streaming konten ke audiens yang lebih luas. Namun, ini datang dengan biaya latensi yang sedikit lebih tinggi.
Jika fokus utama Anda adalah streaming waktu nyata, latensi rendah, WEBRTC mungkin menjadi pilihan yang lebih baik. Jika tidak, jika fokus utama Anda adalah skalabilitas dan kompatibilitas, maka HLS mungkin menjadi pilihan yang lebih baik.
Kesimpulan
Sebagai kesimpulan, baik WEBRTC dan HLS memiliki fitur unik mereka sendiri dan menggunakan kasus yang membuatnya cocok untuk berbagai jenis streaming. WebRTC paling cocok untuk latensi rendah, komunikasi real-time seperti panggilan suara dan video, konferensi online dan obrolan. Di sisi lain, HLS paling cocok untuk streaming berkualitas tinggi dari video yang direkam sebelumnya di berbagai perangkat.
FAQ
1. Apakah WebRTC menggunakan TCP atau UDP?
WebRTC menggunakan TCP dan UDP tergantung pada jenis data yang sedang dikirim. Ini menggunakan TCP untuk mengendalikan pesan dan UDP untuk streaming media.
2. Apakah YouTube menggunakan HLS?
Ya, YouTube menggunakan HLS (streaming langsung HTTP) sebagai salah satu protokol streamingnya untuk mengirimkan video ke pemirsa.
3. Apakah WebRTC hanya untuk browser?
WebRTC terutama merupakan teknologi berbasis browser, tetapi juga dapat digunakan dalam aplikasi asli melalui perpustakaan WebRTC.
4. Apakah netflix menggunakan webrtc?
Tidak, Netflix tidak menggunakan WebRTC untuk streaming. Mereka menggunakan teknologi berpemilik mereka sendiri yang disebut streaming adaptif melalui HTTP (ASOH) yang didasarkan pada HTTP Live Streaming (HLS).