为了澄清当我询问浏览器到浏览器的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的东西。如果 websockets 中的 p2p 是不可能的,是否有类似的替代方案?任何帮助表示赞赏。
websockets 是否允许 p2p(浏览器到浏览器)通信?
不能。浏览器只能发起 WebSockets 连接,不能接收它们。在W3C的浏览器API规范只定义了如何启动出站连接。
您可以创建一个既可以启动又可以接受 WebSockets 连接的应用程序,但浏览器不会这样做。
您可以查看Pusher App,您可以使用它来构建具有多个客户端的 WebSockets 应用程序。该服务免费提供多达 20 个同时的 WebSockets 客户端(您可以为更高的扩展付费)。
更新:
所述的WebRTC协议和API正在迅速进展,并允许两个对等体(可能仍然需要用于初始NAT遍历和设置一个STUN / TURN服务器)之间建立数据信道。
理论上可以使用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 支持。
我正在阅读有关 websocket 和 peer 2 peer 的信息,并找到了PeerJS。
我仍然没有做任何事情,但从例子来看,它看起来很有希望。
现在有可能,目前只有 Chrome、FF 和 Opera 支持它(桌面)。
现在网络上开始出现一些库,例如PeerJS和js-platform-p2p,它们大大简化了事情。
简单可靠的跨浏览器支持方式是使用http://httprelay.io和 AJAX 调用。它还实现了对游戏开发有用的一对多通信。