[Log in]

.:Dream.. is a completely Java-based extendable web server built with performance in mind. The entire Harvtronix site runs on it

Programmed .:Dream.. Web Server Jun 26, 2015 3:43pm UTC
One of my goals with Harvtronix.com has always been to "make it myself" rather than to rely on 3rd party libraries. Because of that, I've had to innovate on many different fronts: JavaScript code, reliable AJAX requests, MVC frameworks, push notifications, custom-built PC cases... The list goes on.

Joining that list now is another program I've written. This one goes by the name "Dream" and it's a fully functional web server.

That's right. Harvtronix.com (and all of my other hosted sites) now run on a custom-built web server, rather than something that's already available like Nginx, Lighttpd, or Apache.

Pretty cool, right?! I think so :)

Some info about the project:
- It's built in Java
- Though I'm always adding new features, it's stable enough to run all of my sites without any issues
- It implements FastCGI for PHP
- It implements both chunked and content-length based transfer encodings
- It handles range-based requests for large and streaming media files
- It does URL rewriting, redirecting, IP-based access control, basically the usual stuff expected by mod_rewrite
- The config files are all in JSON and were built with simplicity and ease of use in mind
- It performs on-par with Lighttpd, and only slightly slower when fully serving a site over HTTPS
- Oh yeah, it supports HTTPS using TLSv1.2
- It doesn't yet support SNI, but I will likely implement that soon
update: .:Dream.. now fully supports SNI for name-based Certificate handling!

- And last, but not least: It's fully extendable. Anyone can write a custom DreamHandler for their own file type to trigger different behaviors of the server. As an example, you could make it so that any file requested with an extension of ".chat" opens up a websocket, rather than a traditional port.

Soon I'd like to release a development environment (as well as the server itself) for people to use free of charge, so stay tuned for that.

Why call it .:Dream..? I'm not really sure. I just like working in an environment where each incoming request is treated as a "Dream", and there's the server that's responsible for making sure everyone gets the correct Dreams and that they are all handled/processed correctly.
Comment on this blog post!