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