47
votes

I am trying to understand the difference between WebRTC and WebSockets so that I can better understand which scenario calls for what. I am curious about the broad idea of two parties (mainly web based, but potentially one being a dedicated server application) talking to each other.

Assumption:

  • Clearly in regards to ad-hoc networks, WebRTC wins as it natively supports the ICE protocol/method.

Questions:

  • Regarding direct communication between two known parties in-browser, if I am not relying on sending multimedia data, and I am only interested in sending integer data, does WebRTC give me any advantages over webSockets other than data encryption?
  • Regarding a dedicated server speaking to a browser based client, which platform gives me an advantage? I would need to code a WebRTC server (is this possible out of browser?), or I would need to code a WebSocket server (a quick google search makes me think this is possible).
3
Browser -> Browser communication via WebSockets is not possible. The question still remains whether or not WebSockes or WebRTC is better for Browser -> Server communication.lvicks
WebRTC datachannel api will allow us much awesome functionalities – but frankly speaking: for your question perspective: WebSockets is the BEST choice for transferring data --- and WebRTC can’t compete WebSockets in this case!! ---- WebRTC is designed to share media streams not data streams --- data streams are extensions or parts --- not the whole subject! --- (This is just my personal point of view so I apologize if I’m wrong!)Muaz Khan

3 Answers

21
votes

WebRTC specifies media transport over RTP .. which can work P2P under certain circumstances. In any case to establish a webRTC session you will need a signaling protocol also .. and for that WebSocket is a likely choice. In other words: unless you want to stream real-time media, WebSocket is probably a better fit.

45
votes

There is one significant difference: WebSockets works via TCP, WebRTC works via UDP. In fact, WebRTC is SRTP protocol with some additional features like STUN, ICE, DTLS etc. and internal VoIP features such as Adaptive Jitter Buffer, AEC, AGC etc.

So, WebSockets is designed for reliable communication. It is a good choice if you want to send any data that must be sent reliably.

When you use WebRTC, the transmitted stream is unreliable. Some packets can get lost in the network. It is bad if you send critical data, for example for financial processing, the same issue is ideally suitable when you send audio or video stream where some frames can be lost without any noticeable quality issues.

If you want to send data channel via WebRTC, you should have some forward error correction algorithm to restore data if a data frame was lost in the network.

10
votes

Question 1: Yes. The DataChannel part of WebRTC gives you advantages in this case, because it allows you to create a peer to peer channel between browsers to send and receive any raw data you want. Websockets forces you to use a server to connect both parties.

Question 2 Like I said in the previous response, Websockets are better if you want a server-client communication, and there are many implementations to do this (i.e. jWebSocket). To add support in a server to establish a connection with a WebRTC DataChannel, it may take you some days of life and health. :)