HttpCodecDispatcher.java 文件源码

java
阅读 26 收藏 0 点赞 0 评论 0

项目:nettythrift 作者:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (msg instanceof ByteBuf && ctx.channel().isActive()) {
        boolean isHttpRequest = false;
        ByteBuf buffer = (ByteBuf) msg;
        final int len = 11;
        if (buffer.readableBytes() > len) {
            byte[] dst = new byte[len];
            buffer.getBytes(buffer.readerIndex(), dst, 0, len);
            int n = HttpMethodUtil.method(dst);
            isHttpRequest = n > 2;
        }
        if (isHttpRequest) {
            ChannelPipeline cp = ctx.pipeline();
            String currentName = ctx.name();
            cp.addAfter(currentName, "HttpRequestDecoder", new HttpRequestDecoder());
            cp.addAfter("HttpRequestDecoder", "HttpResponseEncoder", new HttpResponseEncoder());
            cp.addAfter("HttpResponseEncoder", "HttpObjectAggregator", new HttpObjectAggregator(512 * 1024));
            ChannelHandler handler = serverDef.httpHandlerFactory.create(serverDef);
            cp.addAfter("HttpObjectAggregator", "HttpThriftBufDecoder", handler);

            cp.remove(currentName);
        }
    }
    ctx.fireChannelRead(msg);
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号