Jak mogę utworzyć połączenie między przeglądarką (peer to peer)? [Zamknięte]


84

Jak napisać stronę internetową przy użyciu HTML5 , CSS i JavaScript po stronie klienta, która pozwoli na bezpośrednie połączenie tcp / ip między przeglądarkami klienta po załadowaniu strony .

Muszę to zrobić, aby zmniejszyć opóźnienie, ponieważ witryna będzie wymagać, aby dane wejściowe od jednego użytkownika zostały przesłane do drugiego użytkownika tak szybko, jak to możliwe, więc wysyłanie danych z klienta A do serwera, a następnie do klienta B nie jest dobre opcja.

Czytałem poprzednie posty na ten temat, ale nie było dostępnych rozwiązań / przykładów, które mógłbym znaleźć. Z tego co czytałem bezpośrednie połączenie między klientami można nawiązać za pomocą wtyczek takich jak Silverlight, Java czy Flash.

Czy istnieje rozwiązanie, które nie wymagałoby wtyczek? Chciałbym używać tylko JavaScript.


3
Połączenie równorzędne WebRTC bez serwera sygnalizacyjnego: blog.printf.net/articles/2013/05/17/ ...
danijar

1
Zobacz także PeerJS , projekt mający pewne zalety w tej dziedzinie, który ma stosunkowo przyzwoitą obsługę przeglądarki .
Boaz

1
Najprostszym sposobem jest użycie połączeń httprelay.io i AJAX. Jest szybki, mniej niż 50 ms.
Jonas

Odpowiedzi:


126

Tutaj w Stackoverflow jest kilka tematów dotyczących połączeń P2P w przeglądarkach:

  1. Czy HTML5 pozwoli aplikacjom internetowym na nawiązywanie połączeń HTTP peer-to-peer?
  2. Jakie techniki są dostępne do wykonywania P2P w przeglądarce?
  3. Czy HTML5 obsługuje Peer-to-Peer (a nie tylko WebSockets)
  4. Czy HTML5 Websockets może łączyć 2 klientów (przeglądarki) bezpośrednio bez użycia serwera (P2P)
  5. Czy możliwe jest tworzenie połączeń peer-to-peer w przeglądarce internetowej?
  6. Czy gniazda sieciowe umożliwiają komunikację p2p (przeglądarka z przeglądarką)?
  7. Możliwości wideo peer to peer w formacie HTML 5?
  8. Czy WebRTC jest już zaimplementowane w jakichś przeglądarkach?

Jak wspomniano w większości tematów, oba robocze robocze wersje robocze HTML5 na rok 2008 miały sekcję „Połączenia peer-to-peer”:

Od wersji roboczej W3C z 12 lutego 2009 r . Sekcja „Połączenia peer-to-peer” zniknęła. Ale to połączenie P2P nie zniknęło. Wraca pod nazwą PeerConnection w ramach specyfikacji WebRTC (Real-Time Communications):

Od 31 października 2011 r. Projekt redaktora W3C jest oficjalnym projektem roboczym:

Jedyna implementacja PeerConnection (oparta na UDP) istnieje w zmodyfikowanym WebKicie przez laboratoria firmy Ericsson (maj 2011), która działa całkiem dobrze. Niektóre poprawki są teraz w WebKit (październik 2011 - zobacz aktualizacje poniżej!):

Dodatkowo inicjatywa WebRTC to projekt Google, Mozilla i Opera. W związku z tym kontynuują specyfikację dotyczącą PeerConnection:

Prawdopodobnie Chrome (wykorzystuje WebKit) będzie pierwszą dużą przeglądarką obsługującą WebRTC z PeerConnection:

Od 18 stycznia 2012 r. Chrome obsługuje również WebRTC . Można go używać w kanale deweloperskim (Windows, OSX, Linux) i kompilacji Canary (Windows i OSX) , włączając ją w sekcjichrome://flags . Obsługuje tylko MediaStreamwideo i audio i można go przetestować z kilkoma wersjami demonstracyjnymi . Przesyłanie danych aplikacji, takich jak String/ ArrayBuffer/ ..., nie jest do tej pory obsługiwane.

Od 16 marca 2012 roku, sporządzania WebRTC redakcji oddziela „peer-to-peer API danych” do wysyłania i odbierania danych aplikacji (generyczne String, ArrayBufferi Blob). Chromium chce wkrótce wdrożyć Data API (10 kwietnia 2012).

3 kwietnia Mozilla opublikowała również pierwszy działający przykład w WebRTC dla przeglądarki Firefox .

DataChannel jest planowany dla wersji 25 Chrome, za flagą, tymczasem można go przetestować w Firefoksie Nightly / Aurora (12 grudnia 2012):

2018: DataChannels są nadal w fazie eksperymentalnej, ale są dostępne w aktualnych wersjach Chrome i Firefox:


11
Jest rok 2014, czy możesz zaktualizować swój doskonały post o ostatnie postępy?
myroslav

1
@myroslav webrtc.org/interop to dobre miejsce do rozpoczęcia. Obecnie Firefox, Chrome i Opera zapewniają pełne wsparcie i mogą współpracować z odpowiednimi adapterami.
msemelman

1
Niedługo to zrobię!
Dennis

2
w Australii jest rok 2016. Czy możemy uzyskać najnowsze łącza do komunikacji równorzędnej w przeglądarce?
Ganesh Krishnan

1
Tak, a co z tą aktualizacją?
obskyr

6

Muszę cię rozczarować - obecnie nie jest to możliwe tylko w przypadku JavaScript. Websockets (i Socket.IO) umożliwiają połączenie typu gniazdowego między klientem a serwerem, ale nie między klientami. Twoją opcją jest wtyczka - czy to Flash, Silverlight, Java lub wykonana na zamówienie.

Możesz użyć socket.io i emulować to, pisząc prosty serwer proxy.


Czy jesteś pewien, że WebSocket nie pozwala na bezpośrednie połączenie P2P między 2 przeglądarkami? z tego, co mówi wikipedia, brzmi to tak, jakby można: „WebSocket to technologia zapewniająca dwukierunkowe kanały komunikacyjne w trybie pełnego dupleksu za pośrednictwem pojedynczego gniazda protokołu kontroli transmisji (TCP). Jest przeznaczona do implementacji w przeglądarkach internetowych i sieci serwerów, ale może być używany przez dowolną aplikację kliencką lub serwerową ”.
Răzvan Flavius ​​Panda

5
Problem rozwiązany, jeśli nie możesz mieć przeglądarki LISTEN/ działać jako serwer. Będziesz mógł komunikować się z dowolnym serwerem w trybie pełnego dupleksu, ale Twoi klienci nie mogą zostać serwerami. Dodatkowo, jeśli możesz, napotkasz milion problemów z zaporami ogniowymi. Rozwiązanie Emila zadziała lepiej, choć wolniej.
Ghayes

Z technicznego punktu widzenia gniazda sieciowe mogą być używane wszędzie. Ale w przeglądarkach, ze względu na ograniczenia bezpieczeństwa, tak się nie stanie. Ghayes wyjaśnił to. Zwróć też uwagę, że to rozwiązanie prawdopodobnie będzie szybsze , ponieważ zazwyczaj serwery są umieszczane w miejscach o ogromnych przepustowościach, więc twój serwer poradzi sobie dobrze ze 100 klientami, podczas gdy używając prawdziwego p2p bardzo szybko nasycisz połączenie użytkowników.
Emil Iwanow

@Emil Ivanov: To prawda, co mówisz, ale jeśli jest to tylko połączenie 1to1, powinno być szybsze.
Răzvan Flavius ​​Panda

3

Chciałbym zwrócić Twoją uwagę na fakt, że obecnie większość użytkowników znajduje się za NATem lub zaporami ogniowymi, a to oznacza, że ​​nie można łatwo nawiązać połączenia przychodzącego z komputerem użytkownika. Tak więc Twój pomysł zadziała (jeśli kiedykolwiek będzie to możliwe) tylko w niektórych przypadkach i zwiększy złożoność Twojego rozwiązania. Dlatego lepszym rozwiązaniem jest system klient-serwer z możliwie trwałym połączeniem (przy użyciu websockets lub socket.io).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.