所以我希望构建一个聊天应用程序,以允许视频,音频和文本。我花了一些时间研究Websockets和WebRTC来决定使用哪个。由于WebRTC有大量的视频和音频应用程序,这听起来像是一个合理的选择,但是我还应该考虑其他事情吗?随时分享您的想法。
事物:
由于是新的WebRTC,仅在某些浏览器中可用,而websocket似乎在更多浏览器中。
可伸缩性-Websockets使用服务器进行会话,WebRTC似乎是p2p
多路复用/多个聊天室-在Google+环聊中使用,并且我仍在查看演示应用程序的实现方式
服务器-Websockets需要RedisSessionStore或RabbitMQ才能在多台计算机上扩展
WebRTC设计用于视频,音频和任意数据的高性能,高质量通信。换句话说,适用于您所描述的应用程序。
WebRTC应用程序需要一种服务,通过它们可以交换网络和媒体元数据,这一过程称为信令。但是,一旦发生信令,视频/音频/数据将直接在客户端之间进行流传输,从而避免了通过中介服务器进行流传输的性能损失。
WebSocket另一方面是为客户端和服务器之间的双向通信而设计的。可以通过WebSocket流传输音频和视频(例如,请参见here),但是该技术和API并不是为WebRTC那样固有地设计用于高效,鲁棒的流传输。
正如其他答复所说,WebSocket可用于发出信号。
我维护WebRTC resources的列表:强烈建议您先查看有关WebRTC的2013 Google I / O presentation。
WebSockets:
经过认证的IETF标准(6455),所有使用Web-socket-js polyfill的现代浏览器甚至旧式浏览器均提供支持。
使用HTTP兼容的握手和默认端口,可以更轻松地与现有的防火墙,代理和Web服务器基础结构一起使用。
更简单的浏览器API。基本上是一个构造函数,带有几个回调。
仅客户端/浏览器到服务器。
仅支持可靠的顺序传输,因为它是基于TCP构建的。这意味着数据包丢弃可能会延迟所有后续数据包。
WebRTC:
Chrome和Firefox刚刚开始支持。 MS已提出了不兼容的变体。 Firefox和Chrome之间的DataChannel组件尚不兼容。
WebRTC在理想情况下是浏览器到浏览器,但即使如此,几乎始终需要信令服务器来建立连接。现在,最常见的信令服务器解决方案使用WebSockets。
传输层是可配置的,应用程序可以选择连接是否有序和/或可靠。
复杂的多层浏览器API。有JS库提供了一个更简单的API,但是这些库还很年轻并且正在快速变化(就像WebRTC本身一样)。
Websockets使用TCP协议。
WebRTC主要是UDP。
因此使用WebRTC而不是Websocket的主要原因是延迟。使用websocket流,您将具有高延迟或低延迟的断断续续的播放。使用WebRTC,您可以实现低延迟和流畅的播放,这对于VoIP通信至关重要。
只需尝试以2%的网络损耗测试这些技术。您将在Websocket流中看到高延迟。
webRTC或websocket?为什么不同时使用两者。
[建立视频/音频/文本聊天时,webRTC绝对是一个不错的选择,因为它使用对等技术,并且一旦建立并运行连接,就不需要通过服务器传递通信(除非使用TURN) 。
设置webRTC通信时,您必须涉及某种信令机制。 Websocket在这里可能是一个不错的选择,但是webRTC是获取视频/音频/文本信息的方法。聊天室在信令中完成。
但是,正如您提到的,并不是每个浏览器都支持webRTC,因此websocket有时可以成为这些浏览器的良好后备。
安全是您错过的一个方面。
使用Websockets,数据必须通过中央网络服务器传输,该服务器通常会看到所有流量并可以访问它。
使用WebRTC时,数据是端到端加密的,并且不会通过服务器传递(除非有时需要TURN服务器,但它们无法访问转发的消息正文)。
取决于您的应用程序,可能不重要。
如果您要发送大量数据,那么也可能值得考虑由于webRTC的P2P架构节省云带宽成本。
比较websocket和webrtc是不公平的。
Websocket基于TCP的顶部。不同于tcp,可以从websocket数据包的标头信息中检测数据包的边界。
通常,webrtc使用websocket。 webrtc的信令未定义,取决于服务提供商他要使用哪种信令。它可以是SIP,HTTP,JSON或任何文本/二进制消息。
可以使用websocket发送/接收信令消息。
Webrtc是对等连接的一部分。众所周知,在创建对等连接之前,需要进行握手过程才能建立对等连接。Websocket在握手过程中发挥作用。
Websocket和WebRTC可以一起使用,Websocket作为WebRTC的信号通道,而webrtc是视频/音频/文本通道,WebRTC可以在UDP中也可以在TURN中继中,TURN中继支持TCP HTTP以及HTTPS。许多项目一起使用Websocket和WebRTC。