比较gradle和maven
- gradle配置文件基于groovy语言,面向编程语言。
- maven配置文件基于xml语言 老师建议我们下载安装好gradle,且创建项目时用本地的gradle(不用默认的)。
netty的应用场景
netty可以应用于各种协议:
- netty可用作rpc的通信框架
- netty可用作长连接的服务器(webSocket)
- netty也可作为http的服务器
webSocket中:
- 客户端与服务端交互不需要遵循"请求-响应"的模式,可以服务端主动向客户端发送消息。
- 发送的消息可以不遵循"header-body"的格式,可以自定义格式
helloWorld搭建
创建EventLoopGroup,一般创建两个(也可以只一个,但效率稍低,不建议)。
代码语言:javascript复制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)
让线程休眠,然后检查端口上的连接情况即可。