导论
前面几篇文章我们分别从
一、C10K问题经典问答
二、java.nio.ByteBuffer用法小结
三、Channel 通道
四、Selector选择器
五、Centos-Linux安装nc
六、windows环境下netcat的安装及使用
七、IDEA的maven项目的netty包的导入(其他jar同)
八、JAVA IO/NIO
九、网络IO原理-创建ServerSocket的过程
十、网络IO原理-彻底弄懂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同)
具体请看文章七、IDEA的maven项目的netty包的导入(其他jar同)。
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<NioSocketChannel>() {
@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’。
五、Centos-Linux安装nc
六、windows环境下netcat的安装及使用
1.nc客户端1打印(Windows-nc命令打印)
C:\Users\Administrator>nc 127.0.0.1 8080
111111
111111
2.nc客户端1打印(Windows-nc命令打印)
C:\Users\Administrator>nc 127.0.0.1 8080
222
222
往期JavaIO文章
一、C10K问题经典问答
二、java.nio.ByteBuffer用法小结
三、Channel 通道
四、Selector选择器
五、Centos-Linux安装nc
六、windows环境下netcat的安装及使用
七、IDEA的maven项目的netty包的导入(其他jar同)
八、JAVA IO/NIO
九、网络IO原理-创建ServerSocket的过程
十、网络IO原理-彻底弄懂IO
十一、JAVA中ServerSocket调用Linux系统内核
十二、IO进化过程之BIO
十三、Java-IO进化过程之NIO
十四、使用Selector(多路复用器)实现Netty中Reactor单线程模型
十五、使用Selector(多路复用器)实现Netty中Reactor主从模型
如需了解更多更详细内容也可关注本人CSDN博客:不吃_花椒
如果需要后续其他系列文章请后关注私聊或者关注后续其他系列文章。
整体JavaIO体系文章概览