UDP Server Study Part 2 - NodeJs

In Part One of this series we tested a .NET (Mono) Udp Server.

The test has changed a little, and I’ll have to go back and update part one with the new results. The first test we ran was pretty simple. A client running on my machine at home sent 1000 udp packets to an Ubuntu instance running in AWS.

I decided that wasnt enough….. So now the client will generate and send as many packets as it can in a 30 second time frame. The client and the server will both display the number of packets they interact with and I do some fancy math to report on a percentage of success (received / sent).

The NodeJs server performed very similar to the Mono server, with around ~95% success rate.

The node server, and the entire project can be downloaded from here

Just like with the Mono example here is a Youtube video of the test, this time, with music.

Ok since writing this just a couple hours ago, I’ve been doing some research into how I can increase the performance even more. It seems that the packets that weren’t getting accounted for in the Node app were simply never making it there. Node just wasnt reading from the buffer fast enough and it was causing errors and packets to be dropped.

I made the following sysctl changes and have increased the efficiency of the app to 99.8% success rate
**

net.core.rmem_default = 8388608
net.core.rmem_max = 83886080
net.ipv4.tcp_rmem = 4096        87380   6291456
net.ipv4.udp_rmem_min = 4194304

root@ip:~# sysctl -w net.core.rmem_max=83886080
net.core.rmem_max = 83886080
root@ip:~# sysctl -w net.core.rmem_default=8388608
net.core.rmem_default = 8388608
root@ip:~# sysctl -w net.ipv4.udp_rmem_min=4194304

**

 
0
Kudos
 
0
Kudos

Now read this

UDP Server Study Part 1

Download Repo Here So a few weeks ago I secured a new job with a technology company here in Indy. Part of my new role will be re-architecting the backend solution to help improve performance, and eventually migrate the solution to AWS. I... Continue →