JavaScript WebSockets z UDP?

80

Piszę aplikację JavaScript, która musi otrzymywać ogromne ilości danych od innych użytkowników. Nie ma znaczenia, czy niektóre z tych danych zostaną utracone. Czy istnieje sposób używania JavaScript WebSockets z protokołem UDP zamiast TCP?


źródło
1
Można to zrobić przez webRTC. Serwer gier geckosio.github.io wykorzystuje tę technikę.
Fost

Odpowiedzi:

52

Nie, komunikacja UDP w JavaScript nie jest możliwa. Przepraszam.

Pablo Santa Cruz
źródło
2
@TimeMachine Nie są one oparte na protokole WebSockets na bazie TCP, wstępne uzgadnianie jest również wykonywane tak, że jest rozpoznawane przez serwery WWW jako żądanie aktualizacji HTTP. Więcej o protokole można przeczytać w najnowszym szkicu: tools.ietf.org/html/draft-abarth-thewebsocketprotocol-00
Ivo Wetzel
3
@IvoWetzel Dlaczego to oznacza, że ​​nie będą? Przychodzi mi do głowy kilka sposobów bezpiecznego zaimplementowania UDP Websockets.
Timmmm,
35
Odpowiedź nie jest już aktualna: WebRTC webrtc.org oferuje (eksperymentalnie) UDP w przeglądarce, a nodejs może uzyskać dostęp do gniazd udp na serwerze.
Mirko,
Oto [omówienie tego problemu] [1] w odniesieniu do gier. Tam omawia websockets, webrtc (możliwy wybór dla UDP, ale skomplikowany), quic (tylko w Google Chrome) i jego [netcode.io] [2]. [1]: gafferongames.com/post/… [2]: github.com/RedpointGames/netcode.io-browser
Diagon
Połączenie UDP / Datagram Sockets z node.js! Moduł dgram zapewnia implementację gniazd UDP Datagram.
Derk Jan Speelman
57

Wygląda na to, że czekasz na WebRTC, który przechodzi przez proces tworzenia standardów. WebSockets, jak zauważyli inni ludzie, działają przez TCP w wyniku inicjacji z aktualizacją HTTP.

Czad
źródło
4
WebRTC wygląda prawie wspaniale, ale o ile wiem, musisz używać RTCDataChannel do komunikacji danych, a to wykorzystuje SCTP, który nie obsługuje niewiarygodnych dostaw (konieczne w grach). Edycja: Anuluj to, obsługuje zawodny tryb. Dobry artykuł
Timmmm,
Nie tylko to, ale jest to Peer 2 Peer, niezbyt dobry dla autorytarnego serwera.
NiCk Newman
11
Nie ma powodu, dla którego jeden z „rówieśników” nie może być Twoim serwerem.
Czad
6

Wygląda na to, że pytanie jest przeznaczone dla UDP po stronie klienta, ale ponieważ tu trafiłem ...

Można to zrobić w JavaScript UDP na serwerze przy użyciu node.js dgrampakiet .

Nick Benes
źródło
4

Protokół WebSockets jest używany przez TCP tylko zgodnie z aktualnie zdefiniowaną definicją.

Możesz zrobić UDP z Flash, jeśli chcesz użyć serwera RTMFP (Real Time Messaging Flow Protocol).

kanaka
źródło
1

Jeśli to pytanie jest nadal w toku: znalazłem projekt o nazwie JNEXT i jest przykład używający UDP. Sam projekt wydaje się być wstrzymany, ale przynajmniej w Firefoksie działa (nie działa z Chrome i Opera). Może warto go poszukać.

Klaus
źródło
3
Gdybym chciał, żeby użytkownik instalował oprogramowanie, mógłbym jeszcze lepiej wykorzystać Flash.
Flash nie zapewnia jednak UDP.
Brian DiCasa
-4

Myślę, że możesz wykorzystać technologię Silverliht 4. Możesz utworzyć aplikację Silverlight 4 do komunikacji z serwerem, a następnie umieścić ją na stronie html. Następnie Twój JavaScript może budować połączenia TCP za pośrednictwem aplikacji Silverlight 4!

Jan
źródło
Myślę, że jest to bardzo trudne dla aplikacji internetowej, która ma być używana tylko przez programistów Mac i iPhone. ^^ '
2
Ponadto Silverlight nie obsługuje „prawdziwego” UDP, tylko UDP typu multicast i działa tylko w sieci LAN.
Martin Ørding-Thomsen
2
Pytanie dotyczy UDP, a nie TCP
markmnl
-9

Możesz napisać serwer WebSocket, który będzie pełnił rolę proxy / mostu między TCP / UDP.

Tim R.
źródło
21
To zniweczyłoby cały cel UDP.