Websockets允许浏览器之间进行P2P(点对点)通信吗?

92

我问到浏览器之间通信时,是指在没有服务器转发消息的情况下。我想为游戏实现这样的功能。如果WebSockets中的点对点通信不可行,是否有类似的替代方案?谢谢任何帮助。


是的,但是没有浏览器有一个可用的实现,我相信它现在是流API的一部分。 - antimatter15
5
W3C现在起草了有关WebRTC规范的内容,其中包括点对点连接等。 - Pierre de LESPINAY
5个回答

58

浏览器只能发起WebSocket连接,而不能接收WebSocket连接。W3C浏览器API规范仅定义了如何启动出站连接。

您可以创建一个既可以发起也可以接受WebSocket连接的应用程序,但浏览器不支持此功能。

您可以查看Pusher App,使用该服务可以构建具有多个客户端的WebSocket应用程序。该服务免费提供最多20个同时WebSocket客户端(您可以付费以获得更高的扩展性)。

更新:

WebRTC协议和API正在快速发展,并允许在两个对等方之间建立数据通道(您可能仍需要一个STUN/TURN服务器进行初始NAT穿透和设置)。


6
尽管我不建议使用第三方应用程序,自己构建应用程序要简单得多。 - Josh K
我认为你应该更新你的回答: https://labs.ericsson.com/developer-community/blog/beyond-html5-peer-peer-conversational-video - Mehdi Karamosly
2
@kanaka 这意味着你仍然需要通过服务器进行第一次连接,以建立点对点连接吗? - Mehdi Karamosly
1
@MehdiKaramosly,理论上是可能的(http://blog.printf.net/articles/2013/05/17/webrtc-without-a-signaling-server/),但这是一个非常不常见的用例,因为几乎每个人都在NAT防火墙后面,您仍然需要一些方式来设置信令(通信连接详细信息)。 - kanaka
多年后,当其中一个链接改变时,互联网将会停滞不前:http://www.ericsson.com/research-blog/context-aware-communication/beyond-html5-peer-peer-conversational-video/ - L0j1k
显示剩余4条评论

41
理论上,使用WebRTC DataChannel是可能的:
RTCDataChannel是用于高性能、低延迟、点对点通信任意数据的WebRTC API。该API很简单 - 类似于WebSocket,但通信直接在浏览器之间进行,因此即使需要中继(TURN)服务器(当“穿越”防火墙和NAT失败时),RTCDataChannel也可以比WebSocket更快。
“理论上”是因为它还没有被稳定的浏览器支持,并且如果其中一个浏览器在对称NAT后面,则仍然需要中继服务器(TURN)。尽管如此,这仍然是一个非常有前途的功能。
更新:Chrome 26和Firefox 22默认支持RTCDataChannel,如果您将media.peerconnection.enabled设置为true(about:config),Firefox 19-21也支持WebRTC。

1
今天,大多数主要浏览器都支持它,除了 Edge。 (https://caniuse.com/#feat=rtcpeerconnection) - Donald Duck
2
现在Edge也支持了! - Hindol

10

我正在阅读关于WebSocket和P2P(对等)技术的文章,发现PeerJS

尽管我还没有做出任何东西,但从示例中看来,它看起来很有前途。


9
PeerJS 是 WebRTC 的封装。 - Gábor Imre

4

现在是可以做到的,目前只有Chrome,FF和Opera(桌面版)支持它。

现在有一些库开始在网络上出现,比如PeerJSjs-platform-p2p,这些库基本上简化了事情。


1

一种简单可靠的跨浏览器支持方式是使用http://httprelay.io与AJAX调用。它还实现了一对多通信,这对于游戏开发可能非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接