![跟闪电侠学Netty:Netty即时聊天实战与底层原理](https://wfqqreader-1252317822.image.myqcloud.com/cover/384/43738384/b_43738384.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.2 服务端读取客户端数据
在服务端启动流程这一章,我们提到,服务端相关的数据处理逻辑是通过ServerBootstrap的childHandler()方法指定的。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_4.jpg?sign=1739336301-9i19O3ynSkbBCs0Amqf080QgfJJZ1XeB-0-0765754a428ff21a9cde96e034d6b9c3)
现在,我们在initChannel()方法里给服务端添加一个逻辑处理器,这个处理器的作用就是负责读取客户端发来的数据。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_5.jpg?sign=1739336301-kXqAhKQ3bXPJfZJUmZC3VqFI7zZYqROi-0-2617d544932b6d50b769d88571a82066)
这个方法里的逻辑和客户端侧类似,获取服务端侧关于这个连接的逻辑处理链Pipeline,然后添加一个逻辑处理器,负责读取客户端发来的数据。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_6.jpg?sign=1739336301-qZX0izTVau5XL6pNxuH9Dn7UfqNGEiPe-0-553332b35d4d08f335a4fd6a41885b74)
服务端侧的逻辑处理器同样继承自ChannelInboundHandlerAdapter。与客户端不同的是,这里覆盖的方法是channelRead(),这个方法在接收到客户端发来的数据之后被回调。
这里的msg参数指的就是Netty里数据读写的载体,为什么这里不直接是ByteBuf,而需要强转一下呢?我们后面会分析到。这里我们强转之后,调用byteBuf.toString()就能够获得客户端发来的字符串数据。
我们先运行服务端,再运行客户端,下面两个图分别是服务端控制台和客户端控制台的输出。
服务端
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_7.jpg?sign=1739336301-DiijmQOs6f3s0HIKokIdTUoXPt8GHWol-0-c3e2dfe300448a12be648b18ef2f78e5)
客户端
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_8.jpg?sign=1739336301-zLhJdpW47PgzqV9gmYeb0tkMHZzoyRzi-0-78861bacc73dc45d10930afd8b2c57fe)
到目前为止,我们已经实现了客户端发送数据和服务端打印,离本章开头提出的目标还差一半,接下来我们实现另外一半目标:服务端收到数据之后向客户端返回数据。