netty的代码框架

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
“快速”和“简单”并不用产生维护性或性能上的问题。Netty 是一个吸收了多种协议(包括FTP、SMTP、HTTP等各种二进制文本协议)的实现经验,并经过相当精心设计的项目。最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性【来自百度】

编写服务器端模板

启动类
public class Myserver {
public static void main(String[] args)throws Exception{
    EventLoopGroup boss = new NioEventLoopGroup();
    EventLoopGroup woke = new NioEventLoopGroup();//一般使用两个工作组,woke为最终执行的组
    try {
        ServerBootstrap serverBootstrap = new ServerBootstrap();/./获取服务器驱动
        serverBootstrap.group(boss, woke).channel(NioServerSocketChannel.class).handler(new LoggingHandler(LogLevel.INFO)).childHandler(new MyInitializer());//前handler为boss的,后handler为woke的
        ChannelFuture localhost = serverBootstrap.bind("localhost", 8089).sync();.//绑定8089端口
        localhost.channel().closeFuture().sync();
    } finally {
        boss.shutdownGracefully();
    }
}
}
编写MyInitializer
public class MyInitializer extends ChannelInitializer<SocketChannel> {
    protected void initChannel(SocketChannel socketChannel) throws Exception {
        ChannelPipeline pipeline = socketChannel.pipeline();//获取管道
        pipeline.addLast(new IdleStateHandler(3, 4,4, TimeUnit.SECONDS));//拦截处理器一(顺序为读,写,读写空闲时间)
        pipeline.addLast(new MyHandler());//自定义拦截处理器
    }
}
编写MyHandeler
public class MyHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        if (evt instanceof IdleStateEvent){
            IdleStateEvent id = (IdleStateEvent)evt;
            String stateType = null;
            switch(id.state()){
                case READER_IDLE:
                    stateType="读空闲";
                    break;
                case WRITER_IDLE:
                    stateType="写空闲";
                    break;
                case ALL_IDLE:
                    stateType="读写空闲";
                    break;
            }
            System.out.println(stateType);
            ctx.channel().closeFuture();
        }
    }
}

整个程序相当于简化的心跳检测,客户端代码省略因为基本相同。IdleStateHandler(3, 4,4, TimeUnit.SECONDS)这个netty提供的处理器就检测客户端的读写空闲,超过设置时间则会触发IdleStateEvent并将其传到下一个处理器,userEventTriggered方法则检测到该事件的发生做出相应的处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值