导论

前面几篇文章我们分别对一、JAVA IO/NIO体系介绍 、二、网络IO原理-创建ServerSocket-彻底弄懂IO 、三、JAVA中ServerSocket调用Linux系统内核 、四、「大厂职员教你」IO进化过程之BIO 、五、「大厂职员教你」Java-IO进化过程之NIO 、六、Selector实现Netty中Reactor单线程模型 、七、Selector实现Netty中Reactor主从模型 等几个纬度对JavaIO和NIO体系做了详细介绍,并由简到深的根据IO体系的升级过程做了系统分析。

前文中的第六、Selector实现Netty中Reactor单线程模型 、七、Selector实现Netty中Reactor主从模型文章我们已经使用Selector自己实现了Netty框架中的单线程模型、主从模型。如果能深入理解以上两篇文章,那么后续对于Netty的学习和理解Netty的Reactor会非常简单。今天我们先通过入门的角度从Idea中导入Netty包,并且使用Netty构建一个可用于接受数据的服务端。

IDEA的maven项目的netty包的导入(其他jar同)

在这之前要有搭建好maven的环境,如何搭建maven环境请自行百度。

1.




java怎么写一个netty服务端 java netty 客户端_客户端


2.选择Modules


java怎么写一个netty服务端 java netty 客户端_单线程_02


3.


java怎么写一个netty服务端 java netty 客户端_客户端_03


4.等待一会选择,Download to可以不用勾选,下载的jar会放在本地的jar仓库里,如果勾选了则会在该项目下创建一个lib文件,并且将包放里面。


java怎么写一个netty服务端 java netty 客户端_Bootstrap_04


5.


java怎么写一个netty服务端 java netty 客户端_java怎么写一个netty服务端_05


6.选择一个netty包,点击ok,接下来选择即可。
最后选择


java怎么写一个netty服务端 java netty 客户端_单线程_06


7.即可完成。
在该项目的pom.xml里加入netty依赖。

io.nettynetty-all5.0.0.Alpha2

netty入门服务端代码

import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;import io.netty.channel.socket.nio.NioSocketChannel;/** * Created by Bruce on 2020/9/18 * 使用 NettyIO实现多路复用器 **/public class NettyIO {    public static void main(String[] args) throws InterruptedException {        /**         * //单线程模型---netty单线程模型---即接受客户端请求连接也负责处理客户端的数据         * netty单线程模型---写法         * NioEventLoopGroup boss = new NioEventLoopGroup(1);         *         ServerBootstrap serverBootstrap = new ServerBootstrap();         *         serverBootstrap.group(boss,boss)         *                 .channel(NioServerSocketChannel.class)         *                 .childHandler(new MyImbound());         *         *         * //混合模型---netty混合模型---组内有一个boss即接受客户端请求连接也负责处理客户端的数据,其他线程只负责处理客户端的数据         * netty混合模型---写法         * NioEventLoopGroup boss = new NioEventLoopGroup(4);         *         ServerBootstrap serverBootstrap = new ServerBootstrap();         *         serverBootstrap.group(boss,boss)         *                 .channel(NioServerSocketChannel.class)         *                 .childHandler(new MyImbound());         *         * //主备模型---netty主备模型---boss 只负责接口客户端的连接请求 worker负责         *         * -----如果这里把 boss的参数改成  2,那么猜一下系统中会有几个线程?         * 用JDK自带的jvisualvm看一下。         *         * NioEventLoopGroup boss = new NioEventLoopGroup(1);         *         NioEventLoopGroup worker = new NioEventLoopGroup(3);         *         ServerBootstrap serverBootstrap = new ServerBootstrap();         *         serverBootstrap.group(boss,worker)         *                 .channel(NioServerSocketChannel.class)         *                 .childHandler(new MyImbound());         *         */        NioEventLoopGroup boss = new NioEventLoopGroup(1);        NioEventLoopGroup worker = new NioEventLoopGroup(3);        ServerBootstrap serverBootstrap = new ServerBootstrap();        serverBootstrap.group(boss,worker)                .channel(NioServerSocketChannel.class)                .childHandler(new ChannelInitializer() {                    @Override                    protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {                        ChannelPipeline p = nioSocketChannel.pipeline();                        p.addLast(new MyImbound());                    }                });        ChannelFuture future = serverBootstrap.bind(8080).sync();        future.channel().closeFuture().sync();    }}class MyImbound extends ChannelHandlerAdapter{    @Override    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {//        super.channelRead(ctx, msg);        ctx.write(msg);    }    @Override    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {//        super.channelReadComplete(ctx);        ctx.flush();    }}

数据打印:

在linux环境或者windows环境下使用nc命令链接服务端,查看服务端打印过程。

具体linux系统或者windows系统如何安装nc命令,请从网络搜索或查看目录文档 ‘网络IO涉及到的-linux指令.docx’。

1.nc客户端1打印(Windows-nc命令打印)

C:甥敳獲Administrator>nc 127.0.0.1 8080111111111111

2.nc客户端1打印(Windows-nc命令打印)

C:甥敳獲Administrator>nc 127.0.0.1 8080222222

往期文章链接

一、JAVA IO/NIO体系介绍

二、网络IO原理-创建ServerSocket-彻底弄懂IO

三、JAVA中ServerSocket调用Linux系统内核

四、「大厂职员教你」IO进化过程之BIO

五、「大厂职员教你」Java-IO进化过程之NIO

六、Selector实现Netty中Reactor单线程模型
七、Selector实现Netty中Reactor主从模型



java怎么写一个netty服务端 java netty 客户端_客户端_07


后续文章中的整体JavaIO体系文章概览


java怎么写一个netty服务端 java netty 客户端_客户端_08


java怎么写一个netty服务端 java netty 客户端_客户端_09


java怎么写一个netty服务端 java netty 客户端_客户端_10