From 8f0a78f52f2b38f61002f96a595455eb81740de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 27 Feb 2012 09:54:16 +0100 Subject: Add a roadmap --- ROADMAP.md | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 ROADMAP.md (limited to 'ROADMAP.md') diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..a261caf --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,139 @@ +ROADMAP +======= + +This document explains in as much details as possible the +list of planned changes and work to be done on the Cowboy +server. It is non-exhaustive and subject to change. Items +are not ordered. + +* Write more, better examples. + + The first step would be to port misultin's examples + to Cowboy. Then these examples could be completed with + examples for Cowboy specific features. + + The extend/cowboy_examples is to be used for this. As + it is a separate repository, we can organize the file + structure as appropriate. Ideally we would have one + complete example per folder. + + Examples should be commented. They may or may not be + used for writing the user guides. + +* Write user guides. + + We currently have good API documentation, but no step + by step user guides. + +* Write more, better tests. + + Amongst the areas less tested there is protocol upgrades + and the REST handler. + + Current tests should be completed with unit tests + where applicable. We should probably also test the + dependencies used, like erlang:decode_packet/3. + + While eunit and ct tests are fine, some parts of the + code could benefit from PropEr tests. + +* Continuous performance testing. + + Initially dubbed the Horse project, Cowboy could benefit + from a continuous performance testing tool that would + allow us to easily compare the impact of the changes we + are introducing, similar to what the Phoronix test suite + allows. + + Depending on the test it may be interesting to compare + Cowboy to other servers and eventually take ideas from + the servers that outperform Cowboy for the task being tested. + +* Improve HTTP/1.0 support. + + Most of the work on Cowboy has been done with HTTP/1.1 + in mind. But there is still a need for HTTP/1.0 code in + Cowboy. The server code should be reviewed and tested + to ensure compatibility with remaining HTTP/1.0 products. + +* HTTP 100 Continue support. + + Tools like curl expect a 100 Continue before sending a + request body by default. + +* Content-Encoding support. + + Cowboy should be able to send encoded content automatically. + The default should be to encode, but the developer must be + able to override this default either for the whole listener + or just for a single reply. + +* Improve body reading API. + + We want to have various different things for reading the + body. First, there should be raw functions for the different + ways to read the body: basic, transfer encoded, multipart. + Each should allow us to limit the size of what is read. + + On top of these functions there should be two more + advanced functions: one would return the result of parsing + a x-www-form-urlencoded body; the other would parse a + multipart request, save files from the multipart data to + a temporary location and return a proplist of values if any + along with the files details. This behavior is similar to + what is done automatically by PHP with its $_FILES array. + + The advanced functions are of course here for convenience + only and it should be trivial to reimplement them directly + in a Cowboy application if needed. + +* Complete the work on Websockets. + + Now that the Autobahn test suite is available (make inttests), + we have a definite way to know whether Cowboy's implementation + of Websockets is right. The work can thus be completed. The + remaining tasks are proper UTF8 handling and fragmentation. + +* SPDY support. + + While SPDY probably won't be added directly to Cowboy, work + has been started on making Cowboy use SPDY. + +* Hooks. + + Customizable hooks would allow the developer to extend Cowboy + easily. Two kinds of hooks are needed: before dispatching the + request, and before sending a reply. + + The first would allow us to apply site-wide functions like + authentication or request logging and modify the Req if needed. + + The second is more interesting for response logging or to + filter the replies, for example to send custom error pages. + +* Transport upgrades. + + Some protocols allow an upgrade from TCP to SSL without + closing the connection. This is currently not possible + through the Cowboy API. + +* Resizing the acceptor pool. + + We should be able to add more acceptors to a pool but also + to remove some of them as needed. + +* Simplified dispatch list. + + For convenience purposes, the dispatch list should allow + lists instead of binaries. The lists can be converted to + binary by Cowboy at listener initialization. + + There has also been discussion on allowing the dispatch + list to be hierarchical. + +* Add Transport:secure/0. + + Currently Cowboy checks if a connection is secure by + checking if its name is 'ssl'. This isn't a very modular + solution, adding an API function that returns whether + a connection is secure would fix that issue. -- cgit v1.2.3