带UDP的JavaScript WebSockets?


80

我正在编写一个JavaScript应用程序,该应用程序必须从其他用户那里接收大量数据。如果其中一些数据丢失,这并不重要。是否可以将JavaScript WebSockets与UDP而不是TCP一起使用?


1
可以通过webRTC完成。geckosio.github.io游戏服务器使用此技术。
FOST

Answers:


52

不,在JavaScript中不可能进行UDP通信。抱歉。


2
@TimeMachine他们不会在TCP之上构建WebSocket,因此还会进行初始握手,以便Web服务器将其识别为HTTP升级请求。您可以在最新草案中阅读有关该协议的更多信息:tools.ietf.org/html/draft-abarth-thewebsocketprotocol-00
Ivo Wetzel,

3
@IvoWetzel为什么这意味着他们不会?我可以想到几种安全地实现UDP Websocket的方法。
Timmmm 2014年

33
答案不再是最新的:WebRTC webrtc.org在浏览器中提供了(实验性的)UDP,nodejs可以访问服务器上的udp套接字。
Mirko

这是关于游戏的[此问题的讨论] [1]。在那里,他介绍了websockets,webrtc(UDP的可能选择,但很复杂),quic(仅适用于Google chrome)和[netcode.io] [2]。[1]:gafferongames.com/post/… [2]:github.com/RedpointGames/netcode.io-browser
Diagon

UDP /数据报套接字与node.js的连接!dgram模块提供UDP数据报套接字的实现。
Derk Jan Speelman

56

听起来您正在等待的是WebRTC,它正在按照标准流程进行工作。正如其他人所指出的那样,由于启动了HTTP升级,WebSockets在TCP上运行。


4
WebRTC看起来几乎很棒,但是据我所知,您必须使用RTCDataChannel进行数据通信,并且使用不支持不可靠传送(游戏必需)的SCTP。编辑:取消,它确实支持不可靠的模式。好文章在这里
Timmmm'4

不仅如此,它还是Peer 2 Peer,对于独裁服务器来说效果不佳。
NiCk Newman

11
没有任何理由“对等”之一不能成为您的服务器。
乍得


4

WebSockets协议仅按当前定义通过TCP。

如果愿意使用RTMFP(实时消息流协议)服务器,则可以使用Flash进行UDP


1

如果此问题仍未解决:我找到了一个名为JNEXT的项目,并且有一个使用UDP的示例。该项目本身似乎已暂停,但至少在Firefox中可以正常工作(不适用于Chrome和Opera)。也许值得寻找。


3
如果我希望用户安装软件,我什至可以更好地使用Flash。

Flash不会为您提供UDP。
Brian DiCasa 2011年

-4

我认为您可以利用Silverliht 4技术。您可以创建一个Silverlight 4应用程序与服务器进行通信,然后将其封装到html页面中。然后,您的JavaScript可以通过Silverlight 4应用程序建立TCP连接!


我认为这对于仅由Mac和iPhone开发人员使用的Web应用程序来说非常困难。^^'

2
而且,Silverlight不支持“真实” UDP,仅支持多播UDP,并且仅在LAN上有效。
MartinØrding-Thomsen2011年

2
问题是针对UDP而非TCP
markmnl 2012年

-9

您可以编写一个WebSocket服务器作为TCP / UDP之间的代理/桥。


21
那会破坏UDP的全部目的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.