netty連接異常處理_基于netty构建服务的基本步骤

markdown形式,简书地址:基于Netty构建服务的基本步骤

基于netty构建服务的基本步骤

我们通过netty实现一个Http服务器的功能,来说明通过netty构建的Server基本步骤。

学习一个新的知识点,都是通过Hello world开始的,对于netty的学习写一个Hello world程序不像写其他程序那么简单,这里涉及很多非常重要的组件,比如ChannelHandler、EeventLoopGroup、ChannelPipeline等,这些组件随着后续不断学习再一一分析其实现原理。

基于netty构建Http服务器基本步骤实践:

1. 首先我们定义两个线程组 也叫做事件循环组

EevetLoopGroup bossGroup =  new NioEevetLoopGroup();

EevetLoopGroup workerGroup =  new NioEevetLoopGroup();

为什么定义两个线程组,实际上一个线程组也能完成所需的功能,不过netty建议我们使用两个线程组,分别具有不同的职责。bossGroup目的是获取客户端连接,连接接收到之后再将连接转发给workerGroup去处理。

2. 定义一个轻量级的启动服务类

ServerBootstrap serverBootstrap = new ServerBootstrap();

serverBootstrap.group(bossGroup, wokrerGroup).channel(NioServerSocketChannel.class).childHandler(null);

//服务启动后通过绑定到8899端口上,返回ChannelFuture。    ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();

channelFuture.channel().closeFuture().sync();

3. 通过ChannelPipeline初始化处理器,类似于拦截器Chain,当客户端首次连接后即调用initChannel方法完成初始化动作。

[示例代码]

public class TestServerInitializer extends ChannelInitializer{

//初始化器,服务端启动后会自动调用这个方法,它是一个回调方法。    @Override protected void initChannel(SocketChannel ch) throws Exception {

System.out.println("initChannel invoked

 "); //有客户端连接就会执行.        ChannelPipeline channelPipeline = ch.pipeline(); //pipeline一个管道里面可以有很多的ChannelHandler,相当于包含很多个拦截器。//添加处理器,可以添加多个,并且可以将处理器放到pipeline管道的不同位置上。        channelPipeline.addLast("httpServerCodec", new HttpServerCodec()); //HttpServerCodec也是一个很重要的组件.        channelPipeline.addLast("httpServerHandler", new TestHttpServerHandler()); //自定义处理器    }

}

4. 创建自定义处理器,通常继承SimpleChannelInboundHandler,  该处理器覆写channelRead0方法,该方法负责请求接入,读取客户端请求,发送响应给客户端。

[示例代码]

public class TestHttpServerHandler extends SimpleChannelInboundHandler {

private final String FAVICON_ICO = "/favicon.ico";

//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值