Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Websockets faster than WebRTC?

I'm new in the WebRTC and Websockets world. I'm interested in making an 1 vs 1 web game. The problematic is just : How to send simple variables (mainly numbers) from a client to the other client ?

I have a Node.js server with websockets (via socket.io). So, for the clients, I have two solutions :

  • Using Websockets : The client 1 push the var to the server and the server push the var to client 2. This solution allow me to easily adapt my application for many users in one game.
  • Using WebRTC : The offer and the answer are sended via the server with websockets. Then, the client 1 push the var to the client 2 via DataChannel (I don't need getUserData)

I prefer using WebRTC because it eases the work of the server, that allow him to manage more clients. So I set up the two solutions to compare and, big surprise ! Websockets are highly faster than WebRTC !

My test is simple : just a cube rotating using Three.js, the first client make a little rotation at each frame (60 per second) and push the rotation result to the client 2. At the reception, the client 2 update the rotation and render.

With Websockets, the result is perfect but with WebRTC, the client 2 runs really slow, like 5 FPS.

Is that the problem is the way I'm doing it ? Is it normal ? I'm working on localhost, on Firefox.

like image 637
Bamboo Avatar asked Sep 24 '13 10:09

Bamboo


People also ask

Is WebRTC better than WebSockets?

WebRTC is primarily designed for streaming audio and video content. It is possible to stream media with WebSockets too, but the WebSocket technology is better suited for transmitting text/string data using formats such as JSON.

Is WebSocket the fastest?

All the frequently updated applications used WebSocket because it is faster than HTTP Connection. When we do not want to retain a connection for a particular amount of time or reuse the connection for transmitting data; An HTTP connection is slower than WebSockets.

How much faster is WebSocket?

Plain WebSocket can be up to 3.7 times as fast to receive a message from the server compared to Socket.IO and 1.7 times as fast compared to SockJS. Plain WebSocket scales well in terms of response time and memory requirement with higher concurrency levels.

Is WebSocket faster than TCP?

In WebSocket, communication occurs at both ends, which makes it a faster protocol. In HTTP, the connection is built at one end, making it a bit sluggish than WebSocket. WebSocket uses a unified TCP connection and needs one party to terminate the connection. Until it happens, the connection remains active.


1 Answers

The problem is with WebRTC. The WebRTC DataChannel implementation on Chrome (probably the same goes for firefox) is limited to around 30 kbps. I don't know the reason why? Something about not flooding the internet. There is a hack to circumvent this limitation - manually changing the "B=" filed in the SDP before setting it.

However... WebRTC is p2p UNRELIABLE communication. This means that you have to take extra care to ensuring that no messages are lost and the two players observe the same events and environment. I would go with websockets just because they are so much easier, understood and supported. If the game goes viral I would consider WebRTC as a possible optimization.

However if you are doing this game just for fun then you will learn a lot of useful stuff if you choose WebRTC.

If you want to see an example how webrtc is used in real projects take a look at: http://viblast.com/demo

NB! After the introduction of SCTP-based data channels at around the Chrome 31-32 time there is no bandwidth throttling any longer and there is a new mode of operation which allows for reliable data channels.

like image 134
Svetlin Mladenov Avatar answered Oct 09 '22 21:10

Svetlin Mladenov