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

IT技术 javascript ajax websocket p2p
2021-01-28 06:40:04

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

5个回答

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

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

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

更新

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

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

理论上可以使用WebRTC DataChannel

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

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

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

现在边缘也可以!
2021-03-23 06:40:04

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

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

PeerJS 是 WebRTC 的包装器。
2021-03-19 06:40:04

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

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

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