Package io.netty.handler.codec.http2
Class EspressoHttp2MultiplexHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.channel.ChannelDuplexHandler
-
- io.netty.handler.codec.http2.Http2ChannelDuplexHandler
-
- io.netty.handler.codec.http2.EspressoHttp2MultiplexHandler
-
- All Implemented Interfaces:
io.netty.channel.ChannelHandler,io.netty.channel.ChannelInboundHandler,io.netty.channel.ChannelOutboundHandler
public final class EspressoHttp2MultiplexHandler extends io.netty.handler.codec.http2.Http2ChannelDuplexHandlerForked from Netty's Http2MultiplexHandler (4.1.42) (https://github.com/netty/netty/blob/4.1/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2MultiplexHandler.java) In HTTP/1.1, the requests from the client are distributed across 48 workers threads of router. With HTTP/2 there will be only connection between the client -> router, all the requests for a given client are executed on a single I/O worker thread. If there are less than 48 client to a given router, not all threads will be utilized. To mitigate this, this rb forks Netty's multiplex handler and registers the child channels on different I/O workers. This will help distribute the work on to different threads. Design document - https://iwww.corp.linkedin.com/wiki/cf/pages/viewpage.action?pageId=323757534
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classEspressoHttp2MultiplexHandler.EspressoHttp2MultiplexHandlerStreamChannel
-
Constructor Summary
Constructors Constructor Description EspressoHttp2MultiplexHandler(io.netty.channel.ChannelHandler inboundStreamHandler)Creates a new instanceEspressoHttp2MultiplexHandler(io.netty.channel.ChannelHandler inboundStreamHandler, boolean reuseChildChannels, boolean offloadChildChannels)EspressoHttp2MultiplexHandler(io.netty.channel.ChannelHandler inboundStreamHandler, io.netty.channel.ChannelHandler upgradeStreamHandler)Creates a new instance
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidchannelInactive(io.netty.channel.ChannelHandlerContext ctx)voidchannelRead(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object msg)voidchannelReadComplete(io.netty.channel.ChannelHandlerContext ctx)Notifies any child streams of the read completion.voidchannelWritabilityChanged(io.netty.channel.ChannelHandlerContext ctx)voidexceptionCaught(io.netty.channel.ChannelHandlerContext ctx, java.lang.Throwable cause)java.util.Queue<io.netty.handler.codec.http2.EspressoAbstractHttp2StreamChannel>getChildChannelPool()protected voidhandlerAdded0(io.netty.channel.ChannelHandlerContext ctx)protected voidhandlerRemoved0(io.netty.channel.ChannelHandlerContext ctx)voiduserEventTriggered(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object evt)-
Methods inherited from class io.netty.handler.codec.http2.Http2ChannelDuplexHandler
forEachActiveStream, handlerAdded, handlerRemoved, newStream
-
Methods inherited from class io.netty.channel.ChannelDuplexHandler
bind, close, connect, deregister, disconnect, flush, read, write
-
-
-
-
Constructor Detail
-
EspressoHttp2MultiplexHandler
public EspressoHttp2MultiplexHandler(io.netty.channel.ChannelHandler inboundStreamHandler)
Creates a new instance- Parameters:
inboundStreamHandler- theChannelHandlerthat will be added to the { ChannelPipeline} of theChannels created for new inbound streams.
-
EspressoHttp2MultiplexHandler
public EspressoHttp2MultiplexHandler(io.netty.channel.ChannelHandler inboundStreamHandler, io.netty.channel.ChannelHandler upgradeStreamHandler)Creates a new instance- Parameters:
inboundStreamHandler- theChannelHandlerthat will be added to the { ChannelPipeline} of theChannels created for new inbound streams.upgradeStreamHandler- theChannelHandlerthat will be added to the { ChannelPipeline} of the upgradedChannel.
-
EspressoHttp2MultiplexHandler
public EspressoHttp2MultiplexHandler(io.netty.channel.ChannelHandler inboundStreamHandler, boolean reuseChildChannels, boolean offloadChildChannels)
-
-
Method Detail
-
getChildChannelPool
public java.util.Queue<io.netty.handler.codec.http2.EspressoAbstractHttp2StreamChannel> getChildChannelPool()
-
handlerAdded0
protected void handlerAdded0(io.netty.channel.ChannelHandlerContext ctx)
- Overrides:
handlerAdded0in classio.netty.handler.codec.http2.Http2ChannelDuplexHandler
-
handlerRemoved0
protected void handlerRemoved0(io.netty.channel.ChannelHandlerContext ctx)
- Overrides:
handlerRemoved0in classio.netty.handler.codec.http2.Http2ChannelDuplexHandler
-
channelInactive
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception- Specified by:
channelInactivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelInactivein classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelRead
public void channelRead(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception- Specified by:
channelReadin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelReadin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelWritabilityChanged
public void channelWritabilityChanged(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.Exception- Specified by:
channelWritabilityChangedin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelWritabilityChangedin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
userEventTriggered
public void userEventTriggered(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object evt) throws java.lang.Exception- Specified by:
userEventTriggeredin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
userEventTriggeredin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
exceptionCaught
public void exceptionCaught(io.netty.channel.ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception- Specified by:
exceptionCaughtin interfaceio.netty.channel.ChannelHandler- Specified by:
exceptionCaughtin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
exceptionCaughtin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelReadComplete
public void channelReadComplete(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.ExceptionNotifies any child streams of the read completion.- Specified by:
channelReadCompletein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelReadCompletein classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
-