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.
Odpowiedzi:
Tutaj w Stackoverflow jest kilka tematów dotyczących połączeń P2P w 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 sekcji
chrome://flags
. Obsługuje tylkoMediaStream
wideo i audio i można go przetestować z kilkoma wersjami demonstracyjnymi . Przesyłanie danych aplikacji, takich jakString
/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
,ArrayBuffer
iBlob
). 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:
źródło
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.
źródło
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.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).
źródło