HTTP2: netty http2 server demo

本文详细介绍了如何使用Netty框架构建支持HTTP/2协议的服务器,包括Http2FrameCodec的配置、Http2MultiplexHandler的作用以及SSL的支持,提供了示例代码和运行HTTP/2客户端的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

netty http2 server

http2的编解码类和Http2MultiplexHandler

与netty 的http1.1类似,http2也需要相应的编解码器,另外还需要一个处理http2连接通道复用的Handler。如下:

ChannelHandler Desc
io.netty.handler.codec.http2.Http2FrameCodec 负责http2帧和消息的编解码
io.netty.handler.codec.http2.Http2MultiplexHandler 负责流的连接通道复用,将Stream转换为Http2MultiplexHandlerStreamChannel

在构建Http2FrameCodec时,可以通过Http2Settings类对流和数据帧进行设置,覆盖默认其默认值。相应方法如下:

Method Key Desc
headerTableSize(long) HEADER_TABLE_SIZE 设置表头大小
maxConcurrentStreams(long) MAX_CONCURRENT_STREAMS 设置流并数数
initialWindowSize(int) INITIAL_WINDOW_SIZE 设置初始窗口大小
maxFrameSize(int) MAX_FRAME_SIZE 设置数据帧大小上限
maxHeaderListSize(long) MAX_HEADER_LIST_SIZE 设置header数据的大小上限(多个header数据帧的大小相加)
pushEnabled(boolean) ENABLE_PUSH 设置是否启用推送

demo

示例代码如下:

import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.channel.*;
import io.netty.channel.epoll.Epoll;
import io.netty.channel.epoll.EpollEventLoopGroup;
import io.netty.channel.epoll.EpollServerSocketChannel;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http2.*;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.ssl.*;
import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.util.concurrent.DefaultThreadFactory;
import lombok.extern.slf4j.Slf4j;

import javax.net.ssl.SSLException;
import java.net.InetSocketAddress;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ThreadFactory;

@Slf4j
public class HttpServer {
   

    static final String NETTY_EPOLL_ENABLE_KEY = "netty.epoll.enable";

    static final String OS_NAME_KEY = "os.name";

    static final String OS_LINUX_PREFIX = "linux";

    static final String EVENT_LOOP_BOSS_POOL_NAME = "NettyServerBoss";

    static final String EVENT_LOOP_WORKER_POOL_NAME = "NettyServerWorker";


    private static final int DEFAULT_SETTING_HEADER_LIST_SIZE = 4096;
    private static final int MIB_8 = 1 << 23;
    private static final int DEFAULT_MAX_FRAME_SIZE = MIB_8;
    private static final int DEFAULT_WINDOW_INIT_SIZE = MIB_8;
    private static final int KIB_32 = 1 << 15;
    private static final int DEFAULT_MAX_HEADER_LIST_SIZE = KIB_32;

    public static final Http2FrameLogger 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值