netty可以应用于各种协议:
webSocket中:
创建EventLoopGroup,一般创建两个(也可以只一个,但效率稍低,不建议)。
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
bossGroup
接收连接请求,并将后续的通信交给workerGroup
ServerBootstrap serverBootstrap = new ServerBootstrap();
是一个快速启动类。
然后要搭建ServerInitializer
,在initChannel
中创建一个ChannelPipeline
,将自定义的各种Handler
添加进去。
chrome等浏览器在请求网页时,会自动另外发出{域名}/favicon.ico
的请求,请求网站的logo。因此可以在channelRead0
中分析uri做出响应。
在完成对一个域名的请求后,浏览器可能会keep-alive
保持与服务器连接。
HTTP1.1
,可能会有keep-alive
。请求完不关闭连接。HTTP1.0
,就是短连接。在tomcat
之类的容器,可能由容器来决定关闭连接,但在netty
中,可以服务器主动监测没访问的时长,并关闭连接。
服务器可以调用ctx.channel().close();
和ctx.close();
主动关闭连接
如果要运行查看关闭连接效果,可以在
channelRead0
里的开头调用Thread.sleep(8000)
让线程休眠,然后检查端口上的连接情况即可。