【问题标题】:Do websockets allow for p2p (browser to browser) communication?websockets 是否允许 p2p(浏览器到浏览器)通信?
【发布时间】:2011-05-06 07:39:55
【问题描述】:

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

【问题讨论】:

  • 是的,但是没有浏览器有一个有效的实现,我相信它现在是stream API.的一部分
  • W3C 现在起草了WebRTC 规范,其中涉及对等连接等内容。

标签: javascript ajax websocket p2p


【解决方案1】:

没有。浏览器只能发起 WebSockets 连接,不能接收它们。 W3C browser API spec 只定义了如何启动出站连接。

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

您可以查看Pusher App,您可以使用它来构建具有多个客户端的 WebSockets 应用程序。该服务免费提供多达 20 个并发 WebSockets 客户端(您可以为更高的扩展性付费)。

更新

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

【讨论】:

  • +1。虽然我不会推荐第三方应用程序。更容易构建自己的。
  • Pusher 现在每天免费提供 20 个同时连接和 100.000 条消息 :)
  • 我认为你应该更新你的答案:labs.ericsson.com/developer-community/blog/…
  • @kanaka 这意味着您仍然必须第一次通过服务器才能建立对等 2 对等连接?
  • @MehdiKaramosly,理论上是可能的 (blog.printf.net/articles/2013/05/17/…) 但这是一个非常罕见的用例,因为几乎每个人都在 NAT 防火墙后面,您仍然需要一些方法来设置信号(通信连接详细信息)。
【解决方案2】:

理论上WebRTC DataChannel是可能的:

RTCDataChannel 是一个高性能、低延迟的 WebRTC API, 任意数据的点对点通信。 API 是 简单——类似于 WebSocket——但通信直接发生在 浏览器,所以 RTCDataChannel 可以比 WebSocket 快得多,即使 需要中继(TURN)服务器(当“打孔”以应对 防火墙和 NAT 失败)。

“理论上”,因为稳定的浏览器尚不支持它,如果其中一个浏览器位于symmetric NAT 后面,您仍然需要中继服务器 (TURN)。不过,它确实是一个很有前途的功能。

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

【讨论】:

【解决方案3】:

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

虽然我还没有做任何事情,但从例子来看,它看起来很有希望。

【讨论】:

  • PeerJS 是 WebRTC 的包装器。
【解决方案4】:

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

现在网络上开始出现一些库,例如 PeerJSjs-platform-p2p,它们几乎可以简化事情。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多