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色。