![跟闪电侠学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=1739340719-ha7SpEIsqPsiLRbfv5zU0iHzhcWcwR36-0-721870149df10dbb666592e14b490d09)
现在,我们在initChannel()方法里给服务端添加一个逻辑处理器,这个处理器的作用就是负责读取客户端发来的数据。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_5.jpg?sign=1739340719-1Tg07OezfwE6kvNYovcJ9sYNSjCJ8QkR-0-1ad913a18f97c077723766bc248b89ed)
这个方法里的逻辑和客户端侧类似,获取服务端侧关于这个连接的逻辑处理链Pipeline,然后添加一个逻辑处理器,负责读取客户端发来的数据。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_6.jpg?sign=1739340719-pTThCTgHxZISkaImWkrzjPWfgHNpyG4G-0-e39f000a8fe99a79bf3f176c4975f812)
服务端侧的逻辑处理器同样继承自ChannelInboundHandlerAdapter。与客户端不同的是,这里覆盖的方法是channelRead(),这个方法在接收到客户端发来的数据之后被回调。
这里的msg参数指的就是Netty里数据读写的载体,为什么这里不直接是ByteBuf,而需要强转一下呢?我们后面会分析到。这里我们强转之后,调用byteBuf.toString()就能够获得客户端发来的字符串数据。
我们先运行服务端,再运行客户端,下面两个图分别是服务端控制台和客户端控制台的输出。
服务端
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_7.jpg?sign=1739340719-AQ7KizbL3fFLXz5nHZBg8ikPFn1Q27Fr-0-30b58ec093d622a87c4e1ddb88103e5d)
客户端
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_8.jpg?sign=1739340719-kRYgaCl8XVnh6T06WJxrOCuiHGlhPgCr-0-d5795d8082bd80adb079c63fd6f714ce)
到目前为止,我们已经实现了客户端发送数据和服务端打印,离本章开头提出的目标还差一半,接下来我们实现另外一半目标:服务端收到数据之后向客户端返回数据。