Go to file
Norman Maurer 2b191fe6e9 Modify HttpObjectDecoder to allow parsing the HTTP headers in multiple steps.
Motivation:
At the moment the whole HTTP header must be parsed at once which can lead to multiple parsing of the same bytes. We can do better here and allow to parse it in multiple steps.

Modifications:

 - Not parse headers multiple times
 - Simplify the code
 - Eliminate uncessary String[] creations
 - Use readSlice(...).retain() when possible.

Result:

Performance improvements as shown in the included benchmark below.

Before change:
[nmaurer@xxx]~% ./wrk-benchmark
Running 2m test @ http://xxx:8080/plaintext
  16 threads and 256 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.55ms   15.10ms 245.02ms   90.26%
    Req/Sec   196.33k    30.17k  297.29k    76.03%
  373954750 requests in 2.00m, 50.15GB read
Requests/sec: 3116466.08
Transfer/sec:    427.98MB

After change:
[nmaurer@xxx]~% ./wrk-benchmark
Running 2m test @ http://xxx:8080/plaintext
  16 threads and 256 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    20.91ms   36.79ms   1.26s    98.24%
    Req/Sec   206.67k    21.69k  243.62k    94.96%
  393071191 requests in 2.00m, 52.71GB read
Requests/sec: 3275971.50
Transfer/sec:    449.89MB
2014-10-25 16:59:31 +09:00
all Fix missing version properties of transport-epoll in all-in-one JAR 2014-10-21 22:36:19 +09:00
buffer
codec Headers Cleanup 2014-10-22 09:26:31 -04:00
codec-dns
codec-haproxy
codec-http Modify HttpObjectDecoder to allow parsing the HTTP headers in multiple steps. 2014-10-25 16:59:31 +09:00
codec-http2 Overall clean-up on Headers and its subtypes 2014-10-22 15:08:12 +09:00
codec-memcache
codec-mqtt
codec-socks
codec-stomp Netty Headers Class Restructure and Algorithm Updates 2014-10-21 13:04:08 -04:00
common Netty Headers Class Restructure and Algorithm Updates 2014-10-21 13:04:08 -04:00
example Fix the websocket server example 2014-10-25 16:18:19 +09:00
handler Disable SSLv3 to avoid POODLE vulnerability 2014-10-21 13:58:45 +09:00
handler-proxy Netty Headers Class Restructure and Algorithm Updates 2014-10-21 13:04:08 -04:00
license
microbench
resolver Name resolver API and DNS-based name resolver 2014-10-16 17:10:36 +09:00
resolver-dns Fix another resource leak in DnsNameResolver 2014-10-17 11:38:43 +09:00
tarball
testsuite Fix an infinite loop when writing a zero-length FileRegion 2014-10-17 16:04:37 +09:00
transport Implement user-defined writability flags 2014-10-25 15:58:52 +09:00
transport-native-epoll Name resolver API and DNS-based name resolver 2014-10-16 17:10:36 +09:00
transport-rxtx
transport-sctp
transport-udt Name resolver API and DNS-based name resolver 2014-10-16 17:10:36 +09:00
.fbprefs
.gitignore
.travis.yml
CONTRIBUTING.md
LICENSE.txt
NOTICE.txt
pom.xml Upgrading HTTP/2 hpack to latest version 2014-10-16 08:59:08 -07:00
README.md
run-example.sh

Netty Project

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

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:

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.