Update November, 2014: This project has evolved from a generic TCP communications framework into an HTTP web server capable of hosting WordPress, called Rapid Server.
.NET Sockets is a client/server communication system utilizing asynchronous .NET sockets via an Event-based Asynchronous Pattern (EAP) on top of an IAsyncResult Pattern with thread pools (I/O completion ports) and a binary packet-based TCP communications for maximum concurrency, capacity, performance and scalability.
Visit the Github repo for progress. Benchmarks can be found here and here.
Our goal is to shrink the development workflow as much as possible without sacrificing functionality, or introducing custom syntax, overzealous patterns and extra steps into the process.
Visit the Github repo for progress and details.
The preliminary benchmark started out simple enough. In the client app, I set up a for…loop with a start/end timer to see how many requests the server app could handle within a given time period. Surprised by the results, I decided to re-tool the server app into a proper HTTP web server that could handle a GET request and return an HTTP 200 OK with “hello world” to the client. The results didn’t change much from before (still very promising) so I decided to install Node.js in Windows 7 and run a more thorough benchmark using ApacheBench, comparing against Node.js and Apache.
This is a simulated benchmark which should not be taken as a conclusive real-world test. However, the results are fascinating and worth looking into further. Continue reading
Concurrency testing started out simple enough – launch multiple instances of the client app and see how well the server can handle them all. First I used a simple DOS script that would launch 10 clients each time:
for /l %%i in (0,1,10) do (start AsyncSocketClient.exe -port 8989 -address 127.0.0.1)
Launching the client app this many times turns out to be a bad idea since each instance of the app consumes about 8 MB of memory, but even so, the server can handle 100 clients all connecting at once just fine:
Upon further review, the SendMessageToClient function or the callback in the UI thread isn’t optimized properly. A stress test has been built into the client app which creates 100 or 1000 sockets and connects them to the server immediately (no sleep), simulating a massive influx of clients. This heavy load experiment piqued my interest, so I had a look into the SendMessageToClient function to see if it could be optimized. In the callback, we are updating a listbox and textbox on the server’s UI thread. Avoiding these two updates causes the server to perform much better, and that’s fine because we can omit the Forms-based UI and simply write strings to the console, as most servers do.
We can clearly see that the server is able to handle over 10,000 connections without a hiccup:
Access your files from anywhere.
If you’re like most people who have accumulated a large collection of personal photos, music, and videos on your computer at home, but wish you had access to everything whenever and wherever you are, then Nest might be for you!
Or maybe you’re a business owner who’s frequently out of the office. Install Nest on your workstation. Leave town. Open Nest on your smartphone. Start browsing your files!
Your computer + Nest = Your computer on the internet
Or to put it another way, Nest turns your computer into a “Personal Cloud“where you can access your files remotely via a web browser from almost any device, much like the new cloud music players, only you host all of your own files.
In a nutshell, Nest is…
- A remote file browser
- A remote music streamer with playlist support
- A remote image viewer with slideshow support
- A remote document viewer
Don’t allow big corporations to store and own your intellectual property!
What the hell? How did this \\heaven\HP4650 printer get added to my system at login!?
Enter Google Cloud Print.
“By connecting your printer with the Google Cloud you will be able to print to your printer from any computer or smart phone, regardless of where you are. Just activate the Google Cloud Print connector in Google Chrome and your printer will automatically be available to you from Google Cloud Print enabled web and mobile apps.”
The Google Cloud? The Cloud? Cloud Computing? In the Cloud? Google Computing? In the Google!? AAAGGGHHH SHORT CIRCUIT….
Utterly confusing. This is simply the American way, re-branding old $hit for profit. So Google has their own Cloud in the sky. I guess the way they see it, different Cloud-based providers will have their own “Clouds” (read: data centers) where they host and provision software, services and resources on the web.
But how is Google Cloud Print any different than setting up Internet Printing Protocol on your HP Color LaserJet 4650 or Canon iR5000 printer? I’ll tell you the glaring differences:
- Requires Google Chrome on the computer that will be sharing the printer.
- Requires Google Cloud Print-enabled apps to print from, such as Gmail, Google Docs, and Chrome OS. There aren’t many alternatives at this point.
- Works with just about any printer attached to your computer.
- You now rely on Google as a middle man between your internet device and your printer at home.
Big news for old gaming junkies! GameInformer reports today that Duke Nukem Forever is set to be released on May 3, 2011 after 14 years of development and delays. GearBox Software unveiled the game in playable form at PAX a few months ago. GearBox has put out some very polished stuff in the past, so we might actually see Duke hit the shelves once again, with infinitely more anger and firepower for those alien bastards who shot up his ride.
To celebrate this news, I will be personally releasing a never before seen episode pack for Duke Nukem 3D that I developed many many years ago titled Deth. Stay tuned…
Check out the new official trailer, which speaks for itself…
Perry’s Music Streamer has evolved into what is now called Nest. Do check it out!
For lack of a better name, Perry’s Music Streamer is a web application that I’m currently developing which enables you to stream mp3’s from your home computer using any other computer or device with a modern web browser. Here you can find more information about this project. The project was started in June of 2010 and has been going strong since!