Go to file
Louis Ryan 05ce33f5ca Make the flow-controllers write fewer, fatter frames to improve throughput.
Motivation:

Coalescing many small writes into a larger DATA frame reduces framing overheads on the wire and reduces the number of calls to Http2FrameListeners on the remote side.
Delaying the write of WINDOW_UPDATE until flush allows for more consumed bytes to be returned as the aggregate of consumed bytes is returned and not the amount consumed when the threshold was crossed.

Modifications:
- Remote flow controller no longer immediately writes bytes when a flow-controlled payload is enqueued. Sequential data payloads are now merged into a single CompositeByteBuf which are written when 'writePendingBytes' is called.
- Listener added to remote flow-controller which observes written bytes per stream.
- Local flow-controller no longer immediately writes WINDOW_UPDATE when the ratio threshold is crossed. Now an explicit call to 'writeWindowUpdates' triggers the WINDOW_UPDATE for all streams who's ratio is exceeded at that time. This results in
  fewer window updates being sent and more bytes being returned.
- Http2ConnectionHandler.flush triggers 'writeWindowUpdates' on the local flow-controller followed by 'writePendingBytes' on the remote flow-controller so WINDOW_UPDATES preceed DATA frames on the wire.

Result:
- Better throughput for writing many small DATA chunks followed by a flush, saving 9-bytes per coalesced frame.
- Fewer WINDOW_UPDATES being written and more flow-control bytes returned to remote side more quickly, thereby improving throughput.
2015-06-19 15:20:31 -07:00
all [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
buffer [#3888] Use 2 * cores as default minimum for pool arenas. 2015-06-18 07:27:30 +02:00
codec Allow MessageAggregator to disallow non-empty content 2015-06-10 12:06:27 +09:00
codec-dns [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-http Get uploaded size while upload is in progress 2015-06-12 14:16:07 +02:00
codec-http2 Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
codec-memcache [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-mqtt [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-socks [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-stomp [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
codec-xml [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
common Let PoolThreadCache work even if allocation and deallocation Thread are different 2015-05-27 14:38:11 +02:00
example Get uploaded size while upload is in progress 2015-06-12 14:16:07 +02:00
handler [#3883] OpenSSL SSLSession returns incorrect peer principal 2015-06-17 06:36:13 +02:00
handler-proxy [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
license Let PoolThreadCache work even if allocation and deallocation Thread are different 2015-05-27 14:38:11 +02:00
microbench Make the flow-controllers write fewer, fatter frames to improve throughput. 2015-06-19 15:20:31 -07:00
resolver [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
resolver-dns Fix IllegalReferenceCountException in DnsNameResolver 2015-06-03 19:17:56 +09:00
tarball [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
testsuite More meaningful assertion failure message 2015-06-04 12:08:30 +09:00
testsuite-osgi [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
transport Fix broken constructor chaining for FixedChannelPool class. 2015-06-18 20:11:04 +02:00
transport-native-epoll [#3848] Respect EPOLLERR event 2015-06-06 10:34:58 +02:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
transport-udt [maven-release-plugin] prepare for next development iteration 2015-05-07 14:21:08 -04:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Add JVM crash logs to .gitignore 2014-05-18 21:36:54 +09:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
CONTRIBUTING.md Move the pull request guide to the developer guide 2014-03-12 13:13:58 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt Let PoolThreadCache work even if allocation and deallocation Thread are different 2015-05-27 14:38:11 +02:00
pom.xml Remove the verbose:gc flag from the build 2015-05-29 10:43:18 +09:00
README.md Add a link to the 'native transports' page 2014-07-21 12:54:24 -07:00
run-example.sh Add HTTP/2 Netty tiles example 2015-05-18 14:16:54 -07:00

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.