47

我试图了解 WebRTC 和 WebSockets 之间的区别,以便我可以更好地了解哪种情况需要什么。我对两方(主要基于 Web,但可能是专用服务器应用程序)相互交谈的广泛概念感到好奇。

假设:

  • 显然,在 ad-hoc 网络方面,WebRTC 获胜,因为它本身支持 ICE 协议/方法。

问题:

  • 关于浏览器中两个已知方之间的直接通信,如果我不依赖于发送多媒体数据,而我只对发送整数数据感兴趣,那么除了数据加密之外,WebRTC 是否比 webSockets 有任何优势?
  • 关于与基于浏览器的客户端通信的专用服务器,哪个平台给了我优势?我需要编写一个 WebRTC 服务器(这可能在浏览器之外吗?),或者我需要编写一个 WebSocket 服务器(一个快速的谷歌搜索让我认为这是可能的)。
4

3 回答 3

45

有一个显着的区别:WebSockets 通过 TCP 工作,WebRTC 通过 UDP 工作。实际上,WebRTC 是 SRTP 协议,具有一些附加功能,例如 STUN、ICE、DTLS 等,以及内部 VoIP 功能,例如 Adaptive Jitter Buffer、AEC、AGC 等。

因此,WebSockets 是为可靠通信而设计的。如果您想发送任何必须可靠发送的数据,这是一个不错的选择。

使用 WebRTC 时,传输的流是不可靠的。一些数据包可能会在网络中丢失。如果您发送关键数据(例如用于财务处理)则很糟糕,同样的问题非常适合您发送音频或视频流时,其中一些帧可能会丢失而没有任何明显的质量问题。

如果你想通过WebRTC发送数据通道,你应该有一些前向纠错算法来在网络中丢失数据帧时恢复数据。

于 2013-09-27T10:22:52.840 回答
21

WebRTC 指定 RTP 上的媒体传输 .. 在某些情况下可以工作 P2P。在任何情况下,要建立 webRTC 会话,您还需要一个信令协议 .. 并且 WebSocket 是一个可能的选择。换句话说:除非您想流式传输实时媒体,否则 WebSocket 可能更合适。

于 2012-09-09T17:44:49.427 回答
10

问题1: 是的。WebRTC 的 DataChannel 部分在这种情况下为您提供了优势,因为它允许您在浏览器之间创建一个对等通道来发送和接收您想要的任何原始数据。Websockets 强制您使用服务器来连接双方。

问题 2 就像我在之前的回复中所说,如果您想要服务器-客户端通信,Websockets 会更好,并且有很多实现可以做到这一点(即jWebSocket)。要在服务器中添加支持以建立与 WebRTC 数据通道的连接,您可能需要几天的生命和健康。:)

于 2013-01-08T00:34:05.650 回答