275

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

像:

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

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

  • 多路复用/多聊天室 - 在 Google+ 环聊中使用,我仍在查看演示应用程序如何实现。

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

4

8 回答 8

331

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

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

另一方面,WebSocket 是为客户端和服务器之间的双向通信而设计的。可以通过 WebSocket 流式传输音频和视频(例如,请参见此处),但技术和 API 并非天生就设计用于像 WebRTC 那样高效、健壮的流式传输。

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

我维护了一个WebRTC 资源列表:强烈建议您从查看 2013 年 Google I/O演示文稿开始,了解 WebRTC。

于 2013-09-16T09:57:49.357 回答
80

Websockets 使用 TCP 协议。

WebRTC主要是UDP。

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

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

于 2015-09-10T17:02:57.223 回答
77

网络套接字:

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

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

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

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

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

WebRTC:

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

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

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

  • 复杂和多层的浏览器 API。有一些 JS 库可以提供更简单的 API,但这些库还很年轻且变化迅速(就像 WebRTC 本身一样)。

于 2013-09-14T19:28:24.157 回答
44

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

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

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

但是,正如您所提到的,并非每个浏览器都支持 webRTC,因此 websockets 有时可以成为这些浏览器的一个很好的后备方案。

于 2013-09-14T08:18:30.137 回答
20

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

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

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

根据您的应用程序,这可能会或可能不会重要。

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

于 2017-03-23T10:32:55.710 回答
13

比较 websocket 和 webrtc 是不公平的。

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

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

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

于 2017-02-16T09:43:41.793 回答
12

Webrtc 是对等连接的一部分。我们都知道,在创建点对点连接之前,需要握手过程来建立点对点连接。而websockets起到了握手过程的作用。

于 2017-11-13T14:35:06.037 回答
5

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

于 2018-01-16T10:15:17.207 回答