初识Netty
2023-09-02 14:02:53 7 举报
初步认识Netty
作者其他创作
大纲/内容
指定通讯模式NIO,它负责接受连接,并生成与客户端通信的SocketChannel
SocketChannel
.handler()
MyServer
start()
每个EventLoop将处理分配给它的所有Channel的事件和任务
当前线程是不是serverSocketchanel对应的EventLoop
MyServerHandler
为什么是child? 因为是由ServerSocketChannel产生的子Channel,并不是它本身
Main线程
.channel(NioServerSocketChannel.class)
使用ChannelFuture 异步连接服务端
ChannelHandlerAdapter
EventLoop
使用ChannelFuture 异步绑定端口
eventgroup = new NioEventLoopGroup()
ByteBuf
.remoteAddress() 指定服务端的IP和端口
所以这里不是child,Channel本身就是SocketChannel
<<interface>>ChannelInboundHandler
直接执行
EventLoopGroup将为每个新创建的Channel分配一个EventLoop。在每个Channel的整个生命周期内,所有的操作都将由相同的Thread执行
指定泛型,并执行初始化工作
new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new EchoServerHandler()); } }
业务处理
为什么这么设计?解决并发冲突
Thread threadQueue<runnable>taskQueue
.childHandler()
底层会调用serverSocketchanel的方法绑定端口
ChannelOutboundHandlerAdapter
EventLoopGroup
taskQueue
channelActive(ChannelHandlerContext ctx)
线程组
是
服务端网络应用启动类
<<interface>>ChannelOutboundHandler
近似得把它看作是一个线程,并且有自己的任务队列
不是
接收服务端的消息
boot.group(eventgroup)
<<interface>>ChannelHandler
boot.connect()
new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new MyClientHandler()); } }
boot.bind()
.channel(NioSocketChannel.class)
它是一组 EventLoop 的容器,用于分配 Channel 给某一个 EventLoop 进行处理
boot = new BootStrap()
TCP三次握手与服务端建立好连接之后,会触发这个方法
丢到
.address(port) 指定端口
执行的动作打包成一个任务Runnable
MyClientHandler
MyClient
boot = new ServerBootstrap()
客户端网络应用启动类
ChannelInboundHandlerAdapter
指定NIO通信模式
IO多路复用
数据结构
0 条评论
下一页