Akankah HTML5 mengizinkan aplikasi web membuat koneksi HTTP peer-to-peer?

100

Apakah mungkin membuat aplikasi web yang, dengan bantuan server pusat, dapat membuat koneksi langsung dengan pengguna lain dari aplikasi web yang sama? Saya membayangkan proses yang mirip dengan meninju lubang UDP.

Saya telah membaca tentang API WebSockets baru di HTML5, tetapi tampaknya Anda harus memulai koneksi dengan server yang kompatibel dengan WS sebelum koneksi yang sepenuhnya dupleks dapat dimulai. Saya memikirkan lebih lanjut tentang proses untuk membuat koneksi langsung antar klien, dengan server hanya terlibat dalam jabat tangan awal.

CATATAN: Applet Java tidak dihitung. Saya hanya tertarik pada teknologi browser standar.

Peter O.
sumber

Jawaban:

109

Alih-alih tebakan cerdas, berikut adalah jawaban yang diinformasikan:

HTML 5 berencana untuk mengizinkan koneksi peer to peer dari javascript, tetapi koneksi ini TIDAK AKAN RAW TCP.

Spesifikasi lengkapnya dapat ditemukan di http://dev.w3.org/html5/websockets/

jrh

EDIT: dengan referensi khusus untuk koneksi peer to peer, lihat tautan ini:

Penting untuk dicatat bahwa kapabilitas masih dinegosiasikan. Alangkah baiknya bisa membuat aplikasi web "obrolan lokal" :)

jrh

jrharshath
sumber
45
+1 => "Alih-alih tebakan cerdas, berikut ini jawaban yang diinformasikan"
Ionuț G. Stan
2
Apakah WebSocket memungkinkan untuk terhubung ke host APAPUN? Saya percaya spesifikasi mengatakan hanya server.
hegemon
4
Soket Web bukan lagi bagian dari HTML5, tetapi spesifikasi yang berdiri sendiri.
Sergey Ilinsky
8
WebSockets tidak peer to peer - mereka masih klien ke server, dan browser tidak menerapkan setengah server.
Alnitak
4
webSockets tidak melakukan peer to peer, tetapi spesifikasi yang lebih baru, WebRTC, dirancang untuk ini.
Eric Mill
29

PERBARUI 17/10/2012: Fungsi ini sekarang ada di Chrome Stable v22. Untuk menggunakan fungsi ini di Chrome, seseorang harus mengaktifkan dua bendera di chrome: // flags:

  • Aktifkan MediaStream
  • Aktifkan PeerConnection

Kemudian Anda dapat mengunjungi Halaman Demo AppRTC untuk mencoba demo tersebut. Lihat WebRTC - Menjalankan halaman Demo untuk petunjuk lebih detail tentang menyiapkan Chrome untuk menggunakan fungsi peer to peer dan mengaktifkan pengambilan perangkat.


PEMBARUAN: Para insinyur di Ericcson Labs memiliki bukti konsep dalam pembuatan WebKit yang melakukan HTML5 Peer to Peer Conversational Video .

Mereka memiliki demonstrasi di blog mereka tentang teknologi dalam tindakan, serta diagram dan penjelasan tentang cara kerja teknologi.

Mereka sedang bekerja untuk menstabilkan ini dan berkomitmen ke repositori WebKit.

jmort253
sumber
Berapa lama perkiraan Anda sebelum ini ada di WebKit?
Alistair
Saya tidak tahu. Saya sarankan untuk memeriksa dengan Ericcson. Tautannya ada di jawaban saya. Forum mereka mungkin memiliki informasi kapan itu akan terjadi.
jmort253
Memerlukan pengaturan konfigurasi / bendera khusus per browser tidak sama dengan menjadi bagian dari spesifikasi standar web yang berfungsi. Jika tidak dalam HTML5, WebSockets, atau WebRTC out-of-the-box, maka Anda tidak dapat melakukan peer-to-peer tanpa peretasan. Untungnya tampaknya WebRTC sedang menuju ke arah yang benar.
Beejor
11

Ya akhirnya.

Pada tulisan ini (2017), WebRTC sekarang menjadi bagian standar dari sebagian besar browser modern (sekitar 70% dari yang digunakan), dan memungkinkan untuk streaming multimedia, peer-to-peer, dan hole-punching.

Dokumen, kode contoh, dan contoh langsung untuk WebRTC dapat ditemukan di html5rocks.com .

Menurut caniuse.com dan html5rocks.com , browser berikut mendukung WebRTC:

Dukungan penuh: Edge 14, Firefox 22, Firefox Android 55
Dukungan parsial: Browser Android 56, Chrome 20, Chrome Android 29, Edge 12, Firefox 17, Opera 18, Opera Android 20, Opera Mobile 12, UC Browser Android 11.4
Dukungan masa depan ( Q3 2017): Chrome untuk iOS 11, Safari 11 untuk iOS 11 dan OS X 10.11
Tidak ada dukungan: IE, IE Mobile, Opera Mini

Tingkat saturasi WebRTC terbatas pada perangkat Apple, karena Safari 11 belum dirilis dan memerlukan iOS 11 atau OS X 10.11. Meskipun memproyeksikan dari tren peningkatan sebelumnya, WebRTC seharusnya tersedia di sekitar 75% perangkat iOS pada 2018, dan 100% pada 2020.

Beejor
sumber
4

Ada sejumlah alasan mengapa hal ini menjadi rumit:

  1. Firewall (bahkan hanya NAT biasa) akan membuat sambungan semacam ini sulit dilakukan pada lapisan protokal yang jauh lebih rendah daripada HTTP. Dengan topi keamanan TI saya, ini sepertinya cara yang bagus untuk membuka port sewenang-wenang pada mesin, hanya dengan mengunjungi situs web - dan karenanya akan diblokir secara agresif oleh hampir semua sistem TI perusahaan.
  2. HTTP pada dasarnya adalah protokol server-klien. Meskipun cukup mudah untuk mensimulasikan komunikasi dupleks menggunakan polling yang lama (serta beberapa teknik lainnya), ini tidak terlalu efisien.
  3. Ini akan membuka lubang besar untuk serangan XSS.

WebSockets dirancang untuk memecahkan kedua masalah ini, tetapi (sengaja, saya harapkan) bukan dua lainnya. Ketika mereka berbicara tentang peer-to-peer dalam spesifikasi HTML5, mereka berbicara tentang komunikasi dupleks penuh antara server dan klien, bukan antara satu klien dan klien lainnya.

Namun, akan mudah untuk menerapkan tumpukan jaringan yang tepat di atas soket web - dengan syarat bahwa semua komunikasi masih harus dilakukan melalui server. Saya telah melihat ini dilakukan dengan menggunakan polling panjang (seorang teman saya di Uni menulis tumpukan TCP / IP penuh menggunakan polling panjang).

jwoolard.dll
sumber
P2P bukanlah server-klien; yang pertama memindahkan lalu lintas di antara sesama, yang terakhir memindahkannya melalui server ke satu atau lebih klien. Manfaat utama P2P adalah bahwa server dapat bertindak sebagai mak comblang sementara lalu lintas padat terjadi di antara klien (yang merupakan keuntungan bagi privasi dan bandwidth).
Beejor
0

Saya kedua harshath.jr: Anda bisa saja memiliki server yang bertindak sebagai direktori (memperlihatkan "asal" dari setiap agen yang terhubung; asalnya adalah skema + host + port seperti dalam draf-abarth-origin , dengan skema menjadi "ws" atau "wss"). Anda kemudian dapat memulai koneksi WebSocket peer-to-peer; yang SOP yang bekerja melalui berkat CORS . Tentu saja, ini berarti bahwa setiap agen (yaitu browser) harus menanamkan server WebSocket-nya sendiri (à la Opera Unite).

Sementara itu, lakukan dengan cara XMPP / IRC / etc.: tidak ada koneksi peer-to-peer tetapi koneksi WebSocket ke server pusat (atau jaringan!) Untuk meneruskan pesan ke agen yang terhubung (akhirnya menggunakan beberapa WebSocket tertentu " subprotocol ")

EDIT: perhatikan bahwa semua ini sebenarnya di luar cakupan HTML5 (semua hal itu pernah menjadi bagian dari HTML5 tetapi telah dipisahkan menjadi spesifikasinya sendiri)

Thomas Broyer
sumber