张龙netty学习笔记 P4 P5 P6

2019-05-25 09:13:29 浏览数 (1)

比较gradle和maven

  • gradle配置文件基于groovy语言,面向编程语言。
  • maven配置文件基于xml语言 老师建议我们下载安装好gradle,且创建项目时用本地的gradle(不用默认的)。

netty的应用场景

netty可以应用于各种协议:

  1. netty可用作rpc的通信框架
  2. netty可用作长连接的服务器(webSocket)
  3. netty也可作为http的服务器

webSocket中:

  1. 客户端与服务端交互不需要遵循"请求-响应"的模式,可以服务端主动向客户端发送消息。
  2. 发送的消息可以不遵循"header-body"的格式,可以自定义格式

helloWorld搭建

创建EventLoopGroup,一般创建两个(也可以只一个,但效率稍低,不建议)。

代码语言:javascript复制
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();

bossGroup接收连接请求,并将后续的通信交给workerGroup

代码语言:javascript复制
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)让线程休眠,然后检查端口上的连接情况即可。

0 人点赞