WebRTC与Websockets:如果WebRTC可以处理视频,音频和数据,为什么我需要Websocket? [关闭]

问题描述 投票:198回答:8

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

事物:

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

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

  • 多路复用/多个聊天室-在Google+环聊中使用,并且我仍在查看演示应用程序的实现方式

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

websocket webrtc
8个回答
249
投票

WebRTC设计用于视频,音频和任意数据的高性能,高质量通信。换句话说,适用于您所描述的应用程序。

WebRTC应用程序需要一种服务,通过它们可以交换网络和媒体元数据,这一过程称为信令。但是,一旦发生信令,视频/音频/数据将直接在客户端之间进行流传输,从而避免了通过中介服务器进行流传输的性能损失。

WebSocket另一方面是为客户端和服务器之间的双向通信而设计的。可以通过WebSocket流传输音频和视频(例如,请参见here),但是该技术和API并不是为WebRTC那样固有地设计用于高效,鲁棒的流传输。

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

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


66
投票

WebSockets:

  • 经过认证的IETF标准(6455),所有使用Web-socket-js polyfill的现代浏览器甚至旧式浏览器均提供支持。

  • 使用HTTP兼容的握手和默认端口,可以更轻松地与现有的防火墙,代理和Web服务器基础结构一起使用。

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

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

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

WebRTC:

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

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

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

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


51
投票

Websockets使用TCP协议。

WebRTC主要是UDP。

因此使用WebRTC而不是Websocket的主要原因是延迟。使用websocket流,您将具有高延迟或低延迟的断断续续的播放。使用WebRTC,您可以实现低延迟和流畅的播放,这对于VoIP通信至关重要。

只需尝试以2%的网络损耗测试这些技术。您将在Websocket流中看到高延迟。


38
投票

webRTC或websocket?为什么不同时使用两者。

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

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

但是,正如您提到的,并不是每个浏览器都支持webRTC,因此websocket有时可以成为这些浏览器的良好后备。


9
投票

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

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

使用WebRTC时,数据是端到端加密的,并且不会通过服务器传递(除非有时需要TURN服务器,但它们无法访问转发的消息正文)。

取决于您的应用程序,可能不重要。

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


7
投票

比较websocket和webrtc是不公平的。

Websocket基于TCP的顶部。不同于tcp,可以从websocket数据包的标头信息中检测数据包的边界。

通常,webrtc使用websocket。 webrtc的信令未定义,取决于服务提供商他要使用哪种信令。它可以是SIP,HTTP,JSON或任何文本/二进制消息。

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


5
投票

Webrtc是对等连接的一部分。众所周知,在创建对等连接之前,需要进行握手过程才能建立对等连接。Websocket在握手过程中发挥作用。


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.