为了澄清当我询问浏览器到浏览器之间的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。
为了澄清当我询问浏览器到浏览器之间的通信时,我的意思是在转发消息之间没有服务器。我想为游戏实现这样的功能。如果无法在websockets中使用p2p,是否有类似的选择?任何帮助表示赞赏。
Answers:
否。浏览器只能启动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)。但是,这是一个非常有前途的功能。
更新:如果您通过将WebRTC设置media.peerconnection.enabled
为true(about:config)启用,则Chrome 26和Firefox 22默认支持RTCDataChannel,而Firefox 19-21默认支持。
现在有可能了,目前只有Chrome,FF和Opera支持(桌面)。
现在有一些库开始在网络上弹出,例如PeerJS和js-platform-p2p,它们大大简化了工作。
简单可靠的跨浏览器支持的方法是使用带有AJAX调用的http://httprelay.io。它还实现了可能对游戏开发有用的一对多通信。