websocket是否允许p2p(浏览器到浏览器)通信?


75

为了澄清当我询问浏览器到浏览器之间的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。


是的,但是没有浏览器具有有效的实现,并且我相信它现在已成为流API的
antimatter15年

5
现在,W3C起草了WebRTC规范,该规范讨论了点对点连接等问题。
Pierre de LESPINAY 2011年

Answers:


51

否。浏览器只能启动WebSockets连接,不能接收它们。在W3C的浏览器API规范只定义了如何启动出站连接。

您可以创建一个既可以启动也可以接受WebSockets连接的应用程序,但是浏览器不这样做。

您可能会看一下Pusher App,它可用于构建具有多个客户端的WebSockets应用程序。该服务免费提供多达20个同时的WebSockets客户端(您可以为更高的扩展付费)。

更新

所述的WebRTC协议和API正在迅速进展,并允许两个对等体(可能仍然需要用于初始NAT遍历和设置一个STUN / TURN服务器)之间建立数据信道。


5
+1。虽然我不推荐第三方应用程序。建立您自己的要容易得多。
乔什·K

Pusher现在每天免费提供20个同时连接和100.000条消息:)
Tieme 2012年


1
@kanaka意味着您仍然必须在第一时间通过服务器才能建立对等2对等连接?
Mehdi Karamosly 2013年

1
@MehdiKaramosly,从理论上讲是可能的(blog.printf.net/articles/2013/05/17/…),但这是一个非常罕见的用例,因为几乎每个人都在NAT防火墙后面,并且您仍然需要某种方式来设置信令(传达连接详细信息)。
kanaka 2013年

36

从理论上讲,使用WebRTC DataChannel是可能的:

RTCDataChannel是一个WebRTC API,用于高性能,低延迟,对等数据的对等通信。该API很简单(类似于WebSocket),但是通信直接在浏览器之间进行,因此即使需要中继(TURN)服务器(当“打孔”以应对防火墙和NAT失败时),RTCDataChannel也会比WebSocket快得多。

“理论上”是因为稳定的浏览器尚不支持它,并且如果其中一个浏览器位于对称NAT之后,您仍需要中继服务器(TURN)。但是,这是一个非常有前途的功能。

更新:如果您通过将WebRTC设置media.peerconnection.enabled为true(about:config)启用,则Chrome 26和Firefox 22默认支持RTCDataChannel,而Firefox 19-21默认支持。



1
现在边缘也一样!
Hindol

9

我正在阅读有关websocket和peer 2 peer的信息,并发现了PeerJS

我仍然没有做任何事情,但是通过示例,它看起来很有希望。


6
PeerJS是WebRTC的包装。
的Gabor伊姆雷

3

现在有可能了,目前只有Chrome,FF和Opera支持(桌面)。

现在有一些库开始在网络上弹出,例如PeerJSjs-platform-p2p,它们大大简化了工作。


0

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

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.