Tarayıcıdan tarayıcıya (eşler arası) bağlantı nasıl kurabilirim? [kapalı]


84

İstemci tarafında HTML5 , CSS ve JavaScript kullanarak , sayfa yüklendikten sonra istemci tarayıcıları arasında doğrudan tcp / ip bağlantısına izin verecek bir web sitesini nasıl yazabilirim .

Gecikmeyi azaltmak için bunu yapmam gerekiyor çünkü site, kullanıcılardan birinden gelen girdinin mümkün olan en kısa sürede diğer kullanıcıya iletilmesini gerektirecek, bu nedenle A istemcisinden Sunucuya ve ardından istemciye B'ye veri göndermek iyi değil seçeneği.

Bu konuyla ilgili daha önceki yazıları okudum ancak bulabildiğim çalışan bir çözüm / örnek yoktu. Silverlight, Java veya Flash gibi eklentiler kullanılarak istemciler arasında doğrudan bağlantı kurulabilir.

Eklenti gerektirmeyen herhangi bir çözüm var mı? Sadece JavaScript kullanmak istiyorum.


3
Sinyal sunucusu olmadan WebRTC eş bağlantısı: blog.printf.net/articles/2013/05/17/…
danijar

1
Ayrıca , nispeten iyi bir tarayıcı desteğine sahip olan, bu alanda biraz ilgi gören bir proje olan PeerJS'e bakın .
Boaz

1
En basit yol, httpsprelay.io ve AJAX çağrılarını kullanmaktır . Hızlıdır, 50 ms'den azdır.
Jonas

Yanıtlar:


126

Stackoverflow'da, tarayıcılardaki P2P bağlantıları hakkında birkaç konu vardır:

  1. HTML5, web uygulamalarının eşler arası HTTP bağlantıları yapmasına izin verecek mi?
  2. Tarayıcıda P2P yapmak için hangi teknikler mevcuttur?
  3. HTML5 Eşler Arası Desteği (ve yalnızca WebSockets'i değil)
  4. HTML5 Web Soketleri bir sunucu (P2P) kullanmadan 2 istemciyi (tarayıcı) doğrudan bağlayabilir mi
  5. Bir web tarayıcısında eşler arası bağlantılar oluşturmak mümkün müdür?
  6. Web soketleri p2p (tarayıcıdan tarayıcıya) iletişimine izin veriyor mu?
  7. HTML 5 Eşler Arası Video Olanakları?
  8. WebRTC henüz herhangi bir tarayıcıda uygulanmış mı?

Konuların çoğunda belirtildiği gibi, 2008 HTML5 çalışma taslaklarının her ikisinde de "Eşler arası bağlantılar" bölümü bulunuyordu:

W3C Çalışma Taslağı 12 Şubat 2009'dan bu yana "Eşler arası bağlantılar" bölümü kayboldu. Ancak bu P2P bağlantısı gitmedi. WebRTC (Gerçek Zamanlı İletişim) özelliklerinde PeerConnection adı altında geri döndü:

31 Ekim 2011'den bu yana, W3C Editörün Taslağı resmi bir Çalışma taslağıdır:

PeerConnection'ın (UDP tabanlı) tek uygulaması, oldukça iyi çalışan Ericsson laboratuarları (Mayıs 2011) tarafından değiştirilmiş WebKit'te mevcuttur. Bazı yamalar şu anda WebKit'te (Ekim 2011 - aşağıdaki güncellemelere bakın!):

Ek olarak, WebRTC girişimi Google, Mozilla ve Opera'nın bir projesidir. Böylece, PeerConnection ile ilgili spesifikasyona devam ediyorlar:

Muhtemelen Chrome (WebKit kullanır), PeerConnection ile WebRTC'yi destekleyen ilk büyük tarayıcı olacaktır:

18 Ocak 2012'den beri Chrome, WebRTC'yi de desteklemektedir . Bu kullanımı olabilir Dev kanalı (Windows, OSX, Linux) ve Kanarya yapı (Windows ve OSX) tarafından altında etkinleştirmechrome://flags . Yalnızca MediaStreamVideo ve ses gibi destekler ve birkaç Demo ile test edilebilir . Şu ana kadar String/ ArrayBuffer/ ... gibi uygulama verilerinin aktarılması desteklenmiyor.

16 Mart 2012'den bu yana , WebRTC Editörünün Taslağı , genel uygulama verilerini ( ve ) göndermek ve almak için "Eşler Arası Veri API'sını" ayırmaktadır . Chromium, Data API'yi yakında uygulamak istiyor (10 Nisan 2012).StringArrayBufferBlob

3 Nisan'da Mozilla , Firefox için WebRTC ile ilgili ilk çalışan bir örnek yayınladı .

DataChannel, bir bayrak arkasında Chrome'un 25 sürümü için planlanmıştır, bu arada Firefox Nightly / Aurora'da test edilebilir (12 Aralık 2012)

2018: DataChannels hala deneyseldir, ancak Chrome ve Firefox'un mevcut sürümlerinde mevcuttur


11
2014 burada, Mükemmel gönderinizi son gelişmelerle güncelleyebilir misiniz?
myroslav

1
@myroslav webrtc.org/interop başlamak için iyi bir yerdir. Şimdiye kadar Firefox, Chrome ve Opera tam destek veriyor ve yeterli adaptörlerle birlikte çalışabilir.
msemelman

1
Yakında yapacağım!
Dennis

2
Avustralya'da 2016. Tarayıcı eşler arası için en son bağlantılara sahip olabilir miyiz?
Ganesh Krishnan

1
Evet, güncellemeye ne dersin?
obskyr

6

Seni hayal kırıklığına uğratmak zorundayım - bu şu anda sadece JavaScript ile mümkün değil. Websockets (ve Socket.IO) istemci ile sunucu arasında soket benzeri bir bağlantıya izin verir, ancak istemciler arasında olmaz. Seçeneğiniz bir eklentidir - Flash, Silverlight, Java veya özel yapım olabilir.

Yapabileceğiniz şey socket.io'yu kullanmak ve basit bir proxy sunucusu yazarak bunu taklit etmektir.


WebSocket'in 2 tarayıcı arasında doğrudan p2p'ye izin vermediğinden emin misiniz? wikipedia'da söylenenlere göre kulağa yapabileceği gibi geliyor: "WebSocket, tek bir İletim Kontrol Protokolü (TCP) soketi üzerinden iki yönlü, tam çift yönlü iletişim kanalları sağlayan bir teknolojidir. Web tarayıcılarında ve web'de uygulanmak üzere tasarlanmıştır. sunucular, ancak herhangi bir istemci veya sunucu uygulaması tarafından kullanılabilir. "
Răzvan Flavius Panda

5
Bir tarayıcıya sahip olamıyorsanız LISTEN/ sunucu olarak işlem yapamıyorsanız sorun giderildi . Herhangi bir sunucuyla tam çift yönlü iletişim kurabilirsiniz, ancak tüketicileriniz sunucu olamaz. Ek olarak, mümkünse güvenlik duvarlarıyla ilgili milyonlarca sorunla karşılaşırsınız. Emil'in çözümü daha yavaş da olsa daha iyi sonuç verecek.
ghayes

Teknik olarak web soketleri her yerde kullanılabilir. Ancak tarayıcılarda, güvenlik kısıtlamaları nedeniyle bu olmayacak. gayeler açıkladı. Ayrıca, bu çözümün muhtemelen daha hızlı olacağını unutmayın , çünkü genellikle sunucular büyük bant genişliği kapasitelerine sahip yerlere yerleştirilir, bu nedenle sunucunuz 100 istemciyi iyi idare eder, gerçek p2p kullanırken kullanıcıların bağlantısını çok hızlı bir şekilde doyurursunuz.
Emil Ivanov

@Emil Ivanov: Söylediğin doğru ama sadece 1'e 1 bağlantı ise daha hızlı olmalı.
Răzvan Flavius Panda

3

Dikkatinizi, günümüzde çoğu kullanıcının NAT veya güvenlik duvarlarının arkasında olduğu gerçeğine çevirmek isterim ve bu, kullanıcının bilgisayarına kolayca gelen bağlantı kuramayacağınız anlamına gelir. Dolayısıyla fikriniz (mümkünse) yalnızca bazı durumlarda işe yarayacak ve çözümünüze ekstra karmaşıklık getirecektir. Bu nedenle, muhtemelen kalıcı bağlantıya sahip istemci-sunucu sistemi (websockets veya socket.io kullanarak) daha iyi bir seçenektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.