1. Preface
Our intention is to build good, stable and secure software. This implies detailed documentation.
Note
Do not forget: keep the clean code paradigm in mind.
The following document describes the Base-Layout of FalconAS / HTTP/1.2, its Base Components
and Insfrastructural Layout.
2. Logical Components
The following components are referenced throughout the documentation.
Note
Logical Component Names used in documentation and the C++ Abstraction Model sometimes do not match.
2.1. Configuration
XML Configuration Handling. C++ Transformation.
2.2. Main::Server
Main Server Loop.
2.3. Main::ClientHandler
Client / Connection Handler.
2.4. Main::StaticFSHandler
Static Files / Virtual Host Handler.
2.5. ASProcessHandler
Python Application Server Process Handler.
2.6. ResultProcessor
Result processing process (fork).
2.7. ResultProcessor::ThreadHandler
Result Thread Distributor.
Due to looping on Result sendfile(), write() and Header Processing, each ClientFDs request**s** (plural) will be processed by a single Posix Thread.
This also guarantees that multiple repeated result writes (in case of congestion) always will be processed in serial order.
Big results using multiple writes are sent in the correct order as well.
2.8. ResultProcessor::ResultOrder
Result Ordering will be done for the following types:
Static Files, sendfile()
Application Server Results (JSON), write()
2.8.1. HTTP/1.1
Result Ordering. Results must be sent in the exact order how they arrived. The Result Ordering Class keeps track of dependend ClientFD Requests / Request Nr. and related.
2.8.2. HTTP/1.2
No order needed. Our implementation appends the “Request-UUID” HTTP Header to the HTTP Response.