WebRTC vs Websockets:如果WebRTC可以执行视频,音频和数据,为什么我需要Websockets?

时间:2013-09-14 07:19:29

标签: websocket webrtc

所以我希望建立一个允许视频,音频和文字的聊天应用。我花了一些时间研究Websockets和WebRTC来决定使用哪个。由于WebRTC有很多视频和音频应用程序,这听起来是一个合理的选择,但还有其他我应该考虑的事情吗? 随意分享您的想法。

类似的事情:

  • 由于新的WebRTC仅在某些浏览器上可用,而websockets似乎在更多浏览器中。

  • 可扩展性 - Websockets使用服务器进行会话,WebRTC似乎是p2p

  • 多路复用/多个聊天室 - 用于Google+环聊,我仍然可以查看有关如何实施的演示应用

  • 服务器 - Websockets需要RedisSessionStore或RabbitMQ才能跨多台计算机进行扩展

7 个答案:

答案 0 :(得分:230)

WebRTC专为视频,音频和任意数据的高性能,高质量通信而设计。换句话说,对于与您描述的完全相同的应用程序。

WebRTC应用需要一种服务,通过该服务,他们可以交换网络和媒体元数据,这一过程称为信令。但是,一旦发出信号,视频/音频/数据就会直接在客户端之间流式传输,从而避免了通过中间服务器流式传输的性能成本。

另一方面,WebSocket专为客户端和服务器之间的双向通信而设计。可以通过WebSocket流式传输音频和视频(例如,参见here),但技术和API并非本身设计用于以WebRTC的方式进行高效,强大的流式传输。

正如其他回复所说,WebSocket可用于发信号。

我保留了WebRTC resources的列表:强烈建议您先查看有关WebRTC的2013 Google I / O presentation

答案 1 :(得分:63)

的WebSockets:

  • 批准了IETF标准(6455),支持所有现代浏览器甚至是使用web-socket-js polyfill的旧版浏览器。

  • 使用HTTP兼容握手和默认端口,使其更易于与现有防火墙,代理和Web服务器基础结构一起使用。

  • 更简单的浏览器API。基本上是一个带有几个回调的构造函数。

  • 客户端/浏览器仅限服务器。

  • 仅支持可靠的有序传输,因为它是在TCP上构建的。这意味着数据包丢弃可能会延迟所有后续数据包。

的WebRTC:

  • 刚开始受到Chrome和Firefox的支持。 MS提出了一种不兼容的变体。 Firefox和Chrome之间的DataChannel组件尚不兼容。

  • WebRTC在理想情况下是浏览器到浏览器,但即便如此,也几乎总是需要信令服务器来设置连接。最常见的信令服务器解决方案现在使用WebSockets。

  • 传输层可配置为应用程序,可以选择连接是否有序和/或可靠。

  • 复杂的多层浏览器API。有一些JS库提供了一个更简单的API,但它们很年轻且变化很快(就像WebRTC本身一样)。

答案 2 :(得分:38)

webRTC还是websockets?为什么不同时使用它们。

在构建视频/音频/文本聊天时,webRTC绝对是一个不错的选择,因为它使用对等技术,一旦连接启动并运行,您就不需要通过服务器传递通信(除非使用TURN )。

在设置webRTC通信时,您必须涉及某种信令机制。 Websockets在这里可能是一个不错的选择,但webRTC是获取视频/音频/文本信息的方式。聊天室在信令中完成。

但是,正如你所提到的,并非每个浏览器都支持webRTC,因此对于那些浏览器来说,websockets有时候是一个很好的后备。

答案 3 :(得分:8)

安全是你错过的一个方面。

使用Websockets,数据必须通过中央网络服务器,通常可以看到所有流量并可以访问它。

使用WebRTC,数据是端到端加密的,不会通过服务器(除非有时需要TURN服务器,但他们无法访问他们转发的邮件正文)。

根据您的申请,这可能或不重要。

如果您要发送大量数据,由于webRTC的P2P架构而节省的云带宽成本也值得考虑。

答案 4 :(得分:7)

比较websocket和webrtc是不公平的。

Websocket基于TCP。与tcp不同,可以从websocket分组的头信息中检测分组的边界。

通常,webrtc使用websocket。 webrtc的信令没有定义,服务提供商需要使用什么样的信令。它可以是SIP,HTTP,JSON或任何文本/二进制消息。

可以使用websocket发送/接收信令消息。

答案 5 :(得分:5)

Webrtc是点对点连接的一部分。 我们都知道,在创建点对点连接之前,需要握手过程来建立点对点连接。 websockets扮演握手过程的角色。

答案 6 :(得分:2)

Websocket和WebRTC可以一起使用,Websocket作为WebRTC的信号通道,而webrtc是视频/音频/文本通道,WebRTC也可以在UDP中也可以在TURN中继,TURN中继也支持TCP HTTP和HTTPS。许多项目一起使用Websocket和WebRTC。