• Project structure changes
  • General API changes
  • Buffer API changes
  • ChannelBuffer → ByteBuf
  • ByteBuf is not an interface but an abstract class
  • Most buffers are dynamic with maximum capacity
  • New buffer type: CompositeByteBuf
  • Predictable NIO buffer conversion
  • Little endian support changes
  • Pooled buffers
  • ByteBuf is always reference counted
  • Automatic buffer leak detection
  • io.netty.util.concurrent
  • Channel API changes
  • Revamped ChannelHandler interface
  • Upstream → Inbound, Downstream → Outbound
  • New ChannelHandler type hierarchy
  • ChannelHandler with no event object
  • Simplified channel state model
  • write() does not flush automatically
  • Sensible and less error-prone inbound traffic suspension
  • Suspension of accepting incoming connections
  • Half-closed sockets
  • Flexible I/O thread allocation
  • Ability to create a Channel from an existing JDK socket
  • Deregistration and re-registration of a Channel from·to an I/O thread
  • Scheduling an arbitrary task to be run by an I/O thread
  • Simplified shutdown
  • Type-safe ChannelOption
  • AttributeMap
  • New bootstrap API
  • ChannelPipelineFactory → ChannelInitializer
  • ChannelFuture → ChannelFuture and ChannelPromise
  • Well-defined thread model
  • Write Ordering - Mix EventLoop thread and other threads
  • No more ExecutionHandler - it's in the core.
  • Codec framework changes
  • Codec embedder → EmbeddedChannel
  • HTTP codec
  • Changes in transport implementations
  • Case study: porting the Factorial example
  • Porting the server
  • Porting the client