所以我希望建立一个允许视频,音频和文字的聊天应用。我花了一些时间研究Websockets和WebRTC来决定使用哪个。由于WebRTC有很多视频和音频应用程序,这听起来是一个合理的选择,但还有其他我应该考虑的事情吗? 随意分享您的想法。
类似的事情:
由于新的WebRTC仅在某些浏览器上可用,而websockets似乎在更多浏览器中。
可扩展性 - Websockets使用服务器进行会话,WebRTC似乎是p2p
多路复用/多个聊天室 - 用于Google+环聊,我仍然可以查看有关如何实施的演示应用
服务器 - Websockets需要RedisSessionStore或RabbitMQ才能跨多台计算机进行扩展
答案 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)