Netty4.0.36使用入门

来源:互联网 发布:ebay销售数据采集 编辑:程序博客网 时间:2024/05/29 19:42

以前曾经阅读过Netty的源代码,对其整体的IO,线程模型都还算是比较了解,但是感觉以前的东西都忘记了,而且当时读的时候也比较乱,所以这次准备再重新走一遍,因为5.0版本的正式版还没有出来,所以就选择了4.0.36final版本。。。


最开始还是先看看最简单的使用吧,做一个简单的http服务器,返回hello world


先创建一个Handler来处理读取的数据:

package fjs;import io.netty.buffer.ByteBuf;import io.netty.buffer.ByteBufAllocator;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandler;import io.netty.channel.ChannelInboundHandlerAdapter;import java.nio.charset.Charset;/** * Created by fjs-alienware on 2016/5/22. */public class InHandler extends ChannelInboundHandlerAdapter {    /**     *     * @param ctx              当前连接的上下文环境     * @param msg              其实是读取到的数据     * @throws Exception     */    @Override    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {        ByteBuf buf = (ByteBuf)msg;        System.out.println(buf.toString(Charset.forName("UTF8")));        ByteBuf outBuf = ByteBufAllocator.DEFAULT.buffer();        outBuf.writeBytes("hello world".getBytes());        ctx.writeAndFlush(outBuf);        buf.release();        ctx.close();    }}

这里在channelRead方法里面来处理读取到的数据,代码也很简单,将读取到的数据打印出来,然后发送hello world数据,并关闭连接,这样在在浏览器里面就可以看到 hello world字符了


那么接下来需要一个服务器的启动入口:

package fjs;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoop;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSocketChannel;/** * Created by fjs-alienware on 2016/5/22. */public class Fjs {    public static void main(String args[]) {        EventLoopGroup bossGroup = new NioEventLoopGroup();      /***监听channel将会放到这个ioLoop里面去*/        EventLoopGroup workerGroup = new NioEventLoopGroup();    /**接收到的外部channel将会在这个里面处理**/        try {            ServerBootstrap b = new ServerBootstrap();            /**             * 初始化服务器环境             */            b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {                /**                 * 接收到新的连接将会调用这里来对channel进行初始化                 * @param ch            获取到的外部连接                 * @throws Exception                 */                @Override                protected void initChannel(SocketChannel ch) throws Exception {                    ch.pipeline().addLast(new InHandler());                }            }).option(ChannelOption.SO_BACKLOG, 128).option(ChannelOption.SO_KEEPALIVE, true);            ChannelFuture f = b.bind(8000).sync();            f.channel().closeFuture().sync();         /**等待监听socket的关闭**/        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            bossGroup.shutdownGracefully();            workerGroup.shutdownGracefully();        }    }}


好像整个API还是比较稳定的,跟自己以前读的时候并没有太大的变化,好久没有写Java代码了,有点手生啊。


0 0
原创粉丝点击