Feeling like my code was rather crappy, i thought i'd take another stab at the Rx Webserver problem. I was especially unhappy with the async signature of Socket.BeginRecieve. A little research online and i found HttpListener, a .NET class that does the same thing except with a usable Async function (one that returns something meaningful) for my Observeable.FromAsyncPattern.
A Hyper-fast Rx Web Server
This one actually performs! Here's the code:
Edit: I found this after making mine-- José F. Romaniello's implentation of a .NET Rx Web Server. His code looks much more useful, and is a better example of Rx. My version hardly Rx, really. Anyways, i performance tested his as well and the figures were similar to the tests ran on this one below.
Performance Tests-- MVC3, Nodejs, and Our Rx Server
MVC3
Using a generic controller that returns "Thanks!":
Server Software: | ASP.NET | ||
---|---|---|---|
Server Hostname: | localhost | ||
Server Port: | 31362 | ||
Document Path: | /Test/ | ||
Document Length: | 11 bytes | ||
Concurrency Level: | 1000 | ||
Time taken for tests: | 42.845 seconds | ||
Complete requests: | 10000 | ||
Failed requests: | 0 | ||
Total transferred: | 2700000 bytes | ||
HTML transferred: | 110000 bytes | ||
Requests per second: | 233397.92 | ||
Transfer rate: | 63017.44 kb/s received | ||
Connnection Times (ms) | |||
min | avg | max | |
Connect: | 0 | 0 | 590 |
Processing: | 688 | 4077 | 4649 |
Total: | 688 | 4077 | 5239 |
Our server
Using the code above:
Server Software: | Microsoft-HTTPAPI/2.0 | ||
---|---|---|---|
Server Hostname: | localhost | ||
Server Port: | 8081 | ||
Document Path: | /Test/ | ||
Document Length: | 7 bytes | ||
Concurrency Level: | 1000 | ||
Time taken for tests: | 1.624 seconds | ||
Complete requests: | 10000 | ||
Failed requests: | 0 | ||
Total transferred: | 1500000 bytes | ||
HTML transferred: | 70000 bytes | ||
Requests per second: | 6157021.28 | ||
Transfer rate: | 923553.19 kb/s received | ||
Connnection Times (ms) | |||
min | avg | max | |
Connect: | 0 | 0 | 2 |
Processing: | 39 | 155 | 180 |
Total: | 39 | 155 | 182 |
Node.js
Using the node.js homepage hello world sample:
Server Software: | |||
---|---|---|---|
Server Hostname: | localhost | ||
Server Port: | 1337 | ||
Document Path: | / | ||
Document Length: | 8 bytes | ||
Concurrency Level: | 1000 | ||
Time taken for tests: | 2.066 seconds | ||
Complete requests: | 10000 | ||
Failed requests: | 0 | ||
Total transferred: | 720000 bytes | ||
HTML transferred: | 80000 bytes | ||
Requests per second: | 4839481.65 | ||
Transfer rate: | 348442.68 kb/s received | ||
Connnection Times (ms) | |||
min | avg | max | |
Connect: | 0 | 7 | 94 |
Processing: | 1 | 35 | 244 |
Total: | 1 | 42 | 338 |
The Actual Node.js Beater
Really, there's a good bit of apples to oranges here, but still--can you believe that? I think that means that our little Rx server is C10K compliant! Further, many of our server's metrics beat node.js-- such as transfer rate, requests per second, max times... pretty awesome!
I've still got a ton to learn about Rx... back to the books now.
No comments:
Post a Comment