Although I'm working on the next release of Hiawatha, I think I ran out of ideas of new features to implement in Hiawatha. I believe Hiawatha has everything a modern webserver needs. The list of features that Apache has is much longer than Hiawatha's feature list, but for many of them counts that I strongly believe such feature should be implemented in a web application instead of a webserver.
Another reason to give Hiawatha less priority in my life is that after many years of trying to make Hiawatha more known, I found out that people simply stick to the webserver they know. No matter if that webserver is the best choice for what they need. I will keep on developing Hiawatha, but I will mainly focus on features that I and some friends of mine want in Hiawatha.
After 7.2 has been released, I will be more focussing on another project of mine: the Banshee PHP framework. I'm working on new features and writing some proper documentation. I'm also thinking about making a dedicated website for Banshee.
Don't know about sendfile, but I know that Hiawatha uses a multithreaded model. I remember reading something about this into the forums.
In my opinion, the 10k connections problem is not a problem that should be solved, but should be avoided. If you have a webserver that is likely to have 10k simultaneous client connections, you should be thinking about redundancy and load balancing. Because, apparently you are hosting a popular website. So, in my opinion, Lighttpd was build for the wrong reason.
Another reason for me to use a multithreaded solution, is that a single process solution requires more complex code to handle multiple connections. More complex code can more easily lead to bugs and security issues.
I've tried using sendfile() in Hiawatha, but for several reasons decided not to use it. It appeared that using Hiawatha's internal cache was faster than using sendfile(). I don't know the exact reason, but my guess is that because of Hiawatha is first filling the internal cache before sending, it can read the file in one continues read from disk, instead of reading it in delayed smaller blocks because of limited upload speed. Reading it fast from disk and than sending the file from memory might be the reason it was faster than using sendfile().
Another reason for not using sendfile() is because Hiawatha will not be able to do traffic throttling and to handle stagnating connections.
lighttpd powers our large objects serving. As for the load balancing and redundancy, we already have this for our large website that gets a lot of traffic (including the downloads, powered by lighttpd and a Layer-4 balancer). Hiawatha won't fit the task because of the technology behind the application (Java Servlets), but I am currently investigating alternatives for our smaller applications, PHP based, in order to use less machines to serve more traffic (the classic "cost reduction" as the management loves to say). Most probably the static objects will move towards S3/CloudFront, thus a bunch of servers handling this type of task becomes a "deprecated" solution. Which moves us to the dynamic generated content.
For a web service, I am investigating web servers that can handle a lot of idle keep-alive connections without eating all the available memory as Apache loves to do with its brain dead architecture. So far, nginx with epoll are the closest options to our needs. Hiawatha isn't fully evaluated, yet.
As for the sendfile support, I understand your reasons.
A few weeks ago, a researcher performed a security audit on the Hiawatha source code. He said that with Hiawatha I'm 'doing a great job as far as secure coding'. He only found small issues which will be fixed in the next release. I think that's another of the last small steps to actually being the most secure webserver in the world. I think it's worth the price of a little bit performance.
Nevertheless, I'm very interested in the results of the Hiawatha evaluation. Can you please share them with me?
As for lighty, some internal features that people can not find in every server are used. Along with FreeBSD, it kinda makes the CPU and memory to be mostly useless (110MiB of ram OS+server, 5-10% CPU, under load) while the TCP stack implementation absolutely shines. The "kewl, Lenux" crowd still has to learn a few things from the old fart, traditional UNIX, FreeBSD.
The beauty of the nginx setup is the fact that it can be easily be converted to a reverse proxy for dynamic content serving. Since you were so receptive about a couple of my requests (mod_rpaf like IP headers handling and UNIX socket support for FastCGI) Hiawatha is still a good candidate for this job, behind the proxy. Some commercial CMSes that I need to deploy have some dull rewrite rules (fairly easy to convert from mod_rewrite to nginx's UrlRewrite module) that I don't know if they can be easily converted to Hiawatha's format, thus the proxy can do the rewrite as well. Some people just won't use the Front Controller Pattern Design. This makes the sysadmin life a giant pain in the ass with hundreds of dumb rewrite rules to manage the application beyond the "Apache" mindset. Still curios about how fast your FastCGI implementation can do, since for this kind of requests, the web server is merely a proxy for the PHP upstream. And yes, I'll share the results. Actually, I am going to publish my overall results, any time soon.
I sincerely hope Hiawatha will continue to develop and grow. The word is spreading so don't give up on "changing the world" :-) As long as Hiawatha is maintained I am sure more will see the advantages it offers.
There is one feature I would like to see in a future release. Bandwidth throttling per virtual host. Ability to throttle per user connection would be great. I am not sure if that exists already. I read about throttling scripts I think.
I can't wait to put Hiawatha into production!