WebRTC vs Websockets:如果WebRTC可以做video,audio和数据,为什么我需要Websocket?
所以我即将build立一个聊天应用程序,将允许video,audio和文字。 我花了一些时间研究Websockets和WebRTC来决定使用哪一个。 由于WebRTC中有很多video和audio应用程序,这听起来像是一个合理的select,但是我应该考虑其他事情吗? 随意分享您的想法。
像:
-
由于新的WebRTC仅在某些浏览器上可用,而Websocket似乎在更多浏览器中。
-
可伸缩性 – Websockets使用服务器进行会话,WebRTC似乎是p2p
-
多路复用/多个聊天室 – 在Google+环聊中使用,即时通讯仍然在查看演示应用程序如何实施
-
服务器 – Websockets需要RedisSessionStore或RabbitMQ跨多台机器进行扩展
WebRTC专为video,audio和任意数据的高性能,高质量通信而devise。 换句话说,对于应用程序完全像你所描述的。
WebRTC应用程序需要一个服务,通过它可以交换networking和媒体元数据,这个过程称为信令。 但是,一旦发生信令,video/audio/数据就直接在客户端之间stream动,避免了通过中间服务器stream式传输的性能成本。
另一方面,WebSocket专为客户端和服务器之间的双向通信而devise。 可以通过WebSocket传输audio和video(参见这里举例),但是技术和API本质上并不是以WebRTC的方式进行高效,健壮的传输。
正如其他答复所说,WebSocket(或使用它的框架,如Socket.io)可以是信号传输的好select。
我保留了一份WebRTC资源列表:强烈build议您先查看有关WebRTC的2013年Google I / O 演示文稿 。
WebSockets简介:
-
批准IETF标准(6455),支持跨所有现代浏览器,甚至使用web-socket-js polyfill的传统浏览器。
-
使用HTTP兼容的握手和默认端口,使其与现有的防火墙,代理和Web服务器基础架构一起使用变得更加容易。
-
更简单的浏览器API。 基本上是一个构造函数与几个callback。
-
客户端/浏览器到服务器只。
-
只支持可靠的有序传输,因为它是build立在TCP上的。 这意味着数据包丢失可以延迟所有后续数据包
的WebRTC:
-
刚刚开始受到Chrome和Firefox的支持。 MS提出了一个不兼容的变体。 DataChannel组件在Firefox和Chrome之间还不兼容。
-
在理想情况下,WebRTC是浏览器浏览器,但即使如此,几乎总是需要信令服务器来build立连接。 目前最常见的信令服务器解决scheme使用WebSocket。
-
传输层是可configuration的,应用程序能够select连接是否有序和/或可靠。
-
复杂的多层浏览器API。 有JS库提供了一个更简单的API,但这些年轻和迅速变化(就像WebRTC本身)。
webRTC或websockets? 为什么不使用两个。
在构buildvideo/audio/文本聊天时,webRTC绝对是一个不错的select,因为它使用点对点技术,一旦连接启动并运行,就不需要通过服务器传递通信(除非使用TURN)。
在设置webRTC通信时,您必须涉及某种信号机制。 Websockets可能是一个不错的select,但webRTC是video/audio/文本信息的方式。 聊天室在信令中完成。
但是,正如你所提到的,并不是每个浏览器都支持webRTC,所以websocket有时可以成为这些浏览器的一个很好的回退。
Websockets使用TCP协议。
WebRTC主要是UDP。
因此使用WebRTC代替Websocket的主要原因是延迟。 使用websocketstream式传输,您将有高延迟或低延迟的断续播放。 借助WebRTC,您可以实现低延迟和stream畅的播放,这对于VoIP通信至关重要。
只要尝试testing这些技术与networking损失,即2%。 你会看到Websocketstream中的高延迟。
安全是你错过的一个方面。
使用Websockets的数据必须通过一个中央的Web服务器,通常看到所有的stream量,并可以访问它。
使用WebRTC,数据是端到端encryption的,并且不通过服务器(除了有时需要TURN服务器,但是他们无法访问他们转发的消息的正文)。
根据您的应用程序,这可能或可能不重要。
如果您发送大量数据,由webRTC的P2P架构节约云带宽成本可能也值得考虑。
比较websocket和webrtc是不公平的。
Websocket基于TCP的顶层。 数据包的边界可以从不同于TCP的websocket数据包的头信息中检测出来。
通常,webrtc使用websocket。 webrtc的信令没有被定义,服务提供商要使用什么样的信令。 它可能是SIP,HTTP,JSON或任何文本/二进制消息。
信令消息可以使用websocket发送/接收。
Webrtc是对等连接的一部分。 我们都知道,在创build对等连接之前,需要握手过程来build立对等连接。 websockets扮演握手的angular色。