Netty HTTP服务的实现样例

=Start=

缘由:

Netty 是一个高性能、异步事件驱动的 NIO 框架。在学习 Netty 的时候,发现 Netty 也可以实现HTTP服务,于是把学习的过程记录整理一下形成一篇文章,方便以后参考。

正文:

参考解答:

所有的 Netty 服务器都需要以下2个部分:

  1. ServerBootstrap :这是配置服务器的启动代码。它会将服务器绑定到它要监听连接请求的端口上;
  2. 至少一个 ChannelHandler :该组件实现了服务器对从客户端接收的数据的处理,即它的业务逻辑

这里将Netty服务器放在了3个class中,分别是:

  1. NettyServer #创建ServerBootstrap用于引导服务器
  2. NettyServerChannel #新建channel并用handler进行初始化(可简化放在NettyServer中)
  3. NettyServerHandler #通过覆写部分方法实现具体的业务逻辑

Netty服务器的引导过程:

  • 创建 ServerBootstrap 的实例来引导和绑定服务器。
  • 创建 NioEventLoopGroup 进行事件的处理,包括接收新的连接,处理读写
  • 使用同一个NettyServerHandler实例初始化每一个新的Channel
  • bind()绑定服务器端口进行监听。

&

在上面的NettyServer.java里有一个childHandler()调用,用于添加 NettyServerHandler 到 Channel 的 ChannelPipeline ,是通过新建这里的 NettyServerChannel 类(继承自ChannelInitializer)实现的。

&

由于我们的样例很简单,只需要继承 ChannelInboundHandlerAdapter 就行了。这个类提供了默认 ChannelInboundHandler 的实现,所以只需要部分覆写下面的方法:

  • channelRead() – 每个信息入站都会调用;
  • channelReadComplete() – 通知处理器最后的 channelread() 是当前批处理中的最后一条消息时调用;
  • exceptionCaught()- 读操作时捕获到异常时调用;

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4124.html

《Netty HTTP服务的实现样例》上有3条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注