
Hi Jeremy, First of all, thank you for implementing acme-http. It much helps me when I am improving the performance of warp.
Awesome! That is exactly what acme-http is for! I am definitely interested in figuring out ways to improve acme-http so that it can be a better reference for 'best practices' when it comes to high performance HTTP servers. So, if you discover techniques that can be applied to acme-http I am very interested in hearing about them. Especially when it comes to the 'black magic' parts. acme-http makes no attempts to decode the request body.. because making a faster multipart/form-data decoder is relatively straight-forward. With acme-http I want to explore the more mysterious bottlenecks -- things like maxListenQueue, TCP_NODELAY, etc.
One question and one suggestion. Question: you set NoDelay to the listen socket. What is the intention? Do connected sockets inherit this flag? Regardless of inheritance, I'm not sure this option improves the performance of HTTP servers. It is the option for interactive applications such as ssh. Suggestion: allocating ByteString is a heavy job. If you can reuse the ByteString of recv() for multiple HTTP requests in an HTTP connection, the performance would be improved much. --Kazu