服务端代码

客户端代码

控制台打印
1.客户端

2.服务端

从上面可以看出,客户端发送的数据,服务端可以接收到
各个组件介绍
1.ServerBootstrap和Bootstrap
ServerBootstrap主要用于启动和配置服务器端应用程序,可以设置监听端口,如上述代码中bind绑定的端口8080。
Bootstrap主要用于配置并启动客户端应用程序,用户连接远程主机。
2.EventLoopGroup(EventLoop)
EventLoopGroup是netty中特别重要组件,它可以处理I/O操作的多线程事件循环,服务端一般可以有两个EventLoopGroup实例,一个是boss,主要是用来处理客户端的连接请求,另一个是work,主要处理客户端中的I/O网络读写请求,也就是主从Reactor模型,而每NioEventLoopGroup实例中包含多个NioEventLoop,每个EventLoop中含有一个Selector选择器,和一个线程来处理多个Channel上面的事件,因此EventLoopGroup适合高并发、读写轻量的场景。
3.Channel
Channel是Java NIO中最基本的概念,代表一个打开的连接,代表一个可以进行I/O操作的通道,比如读/写数据。在Netty中,更进一步封装了Channel,抽象出了很多类型的Channel,如 NioSocketChannel, NioServerSocketChannel, LocalServerChannel等,连接开始后,每个channel会绑定一个NioEventLoop,后续的请求操作都是走绑定的NioEventLoop。
4.ChannelHandler
ChannelHandler是Netty中最重要的部分,用于处理网络事件(如连接打开、数据到达等)。用户可以自定义ChannelHandler,处理特定的网络事件。
5.ChannelPipeline
ChannelPipeline是Netty中的一个核心概念,用于存储和管理 ChannelHandler,一个Pipeline可以包含多个ChannelHandler,它在每个Channel中都存在,当一个事件在Channel中发生时,Pipeline会按照添加的顺序调用每个ChannelHandler,上述代码中添加了日志handler和编码解码的handler
6.ChannelFuture
ChannelFuture提供了一种方式,可以在更后面的时间点获取之前的I/O操作的结果。Netty中所有的I/O操作都是异步的,所以返回的ChannelFuture可以在事件完成后获取状态,例如上述代码中的channelFuture.sync(),这个会堵塞当前线程,直到channelFuture中连接操作结束,如果操作成功,那么返回当前的ChannelFuture;如果操作失败,那么抛出一个CompletionException。
本文详细介绍了Netty框架中客户端和服务端代码的关键概念,包括ServerBootstrap和Bootstrap的配置,EventLoopGroup和Channel在处理I/O操作中的角色,以及ChannelHandler、ChannelPipeline和ChannelFuture在处理网络事件和异步操作中的作用。

3134

被折叠的 条评论
为什么被折叠?



