为了澄清当我询问浏览器与浏览器之间的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的东西。如果不能在websockets中使用p2p,是否有类似的替代方案?任何帮助表示赞赏。
答案 0 :(得分:50)
没有。浏览器只能启动WebSockets连接,而不能接收它们。 W3C browser API spec仅定义了如何启动出站连接。
您可以创建一个既启动又接受WebSockets连接的应用程序,但浏览器不会这样做。
您可以查看Pusher App,您可以使用它来构建具有多个客户端的WebSockets应用程序。该服务免费提供多达20个同步WebSockets客户端(您可以支付更高的比例)。
<强>更新强>:
WebRTC协议和API正在快速发展,并允许在两个对等体之间建立数据通道(您仍然可能需要STUN / TURN服务器进行初始NAT遍历和设置)。
答案 1 :(得分:31)
理论上可以使用WebRTC DataChannel:
RTCDataChannel是一个WebRTC API,可实现高性能,低延迟, arbritary数据的点对点通信。 API是 简单 - 类似于WebSocket - 但是之间直接进行通信 浏览器,所以即使RTCDataChannel也比WebSocket快得多 需要一个中继(TURN)服务器(当'打孔'来应对时 防火墙和NAT失败了。)
“理论上”因为它还没有稳定的浏览器支持,如果其中一个浏览器落后于symmetric NAT,你仍然需要一个中继服务器(TURN)。然而,这是一个非常有前途的功能。
更新:Chrome 26和Firefox 22默认支持RTCDataChannel,如果您通过将media.peerconnection.enabled
设置为true(about:config)启用WebRTC,则支持Firefox 19-21。
答案 2 :(得分:6)
我正在阅读websocket和peer 2 peer并找到PeerJS。
我仍然没有做过任何事情,但通过这些例子看起来很有希望。
答案 3 :(得分:0)
现在几天可能,目前只有Chrome,FF和Opera支持它(桌面)。
现在有一些图书馆开始在网络上弹出,例如PeerJS和js-platform-p2p,这几乎简化了事情。
答案 4 :(得分:0)
简单可靠的跨浏览器支持方式是使用http://httprelay.io和AJAX调用。它还实现了一对多的通信,这对于游戏开发非常有用。