Motivation: Previously local settings is applied on its transmission. But this makes settings value out-of-sync with remote endpoint. The application of local settings must be done after the remote endpoint sends back its SETTINGS ACK. This synchronization is vital to the protocol. Suppose that server sends SETTINGS_HEADER_TABLE_SIZE 0 on connection establishment and resizes its header table size down to 0. Meanwhile, client sends HEADERS which has header block encoded in default 4096 header table size, because client has not seen the SETTINGS from server. Server tries to decode received HEADERS but due to the difference of header table size, decoding process may fail. Modifications: We don't apply settings on transmission. Instead, we keep track of outstanding settings in FIFO queue. When we get ACK, we pop oldest outstanding settings and apply its values. Result: The outstanding settings values are applied when its ACK is received, which is compliant behavior to the HTTP/2 specification.
Netty Project
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
Links
How to build
For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.
You require the following to build Netty:
- Latest stable Oracle JDK 7
- Latest stable Apache Maven
Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.
Branches to look
The 'master' branch is where the development of the latest major version lives on. The development of all other versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>
. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.