- 跟闪电侠学Netty:Netty即时聊天实战与底层原理
- 俞超
- 417字
- 2022-05-05 22:12:47
6.2 服务端读取客户端数据
在服务端启动流程这一章,我们提到,服务端相关的数据处理逻辑是通过ServerBootstrap的childHandler()方法指定的。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_4.jpg?sign=1739628920-qvWnpsoE3eJSN6JNUCWX3et9llG3sIta-0-9f99ed744564171c693825abdb7d3c9d)
现在,我们在initChannel()方法里给服务端添加一个逻辑处理器,这个处理器的作用就是负责读取客户端发来的数据。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_5.jpg?sign=1739628920-Vs6twrT84fJ5y3lG3rxMrRJfERpmiILW-0-8572ac97d7e8cfcda7096d163af62193)
这个方法里的逻辑和客户端侧类似,获取服务端侧关于这个连接的逻辑处理链Pipeline,然后添加一个逻辑处理器,负责读取客户端发来的数据。
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_6.jpg?sign=1739628920-fgLazPzSEyAjbiDZ37CgtsDnZ3kDeOpC-0-bfe1a5a7d62e19f86e777ebf00155eaf)
服务端侧的逻辑处理器同样继承自ChannelInboundHandlerAdapter。与客户端不同的是,这里覆盖的方法是channelRead(),这个方法在接收到客户端发来的数据之后被回调。
这里的msg参数指的就是Netty里数据读写的载体,为什么这里不直接是ByteBuf,而需要强转一下呢?我们后面会分析到。这里我们强转之后,调用byteBuf.toString()就能够获得客户端发来的字符串数据。
我们先运行服务端,再运行客户端,下面两个图分别是服务端控制台和客户端控制台的输出。
服务端
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_7.jpg?sign=1739628920-9xFN2EEt57V3IhnU37mWErCBTb5aH3uM-0-d5eb44b8575b087dc3435082feea942a)
客户端
![](https://epubservercos.yuewen.com/6C3355/23020652909769306/epubprivate/OEBPS/Images/txt007_8.jpg?sign=1739628920-VUQ9XF5TU4lsSuM81UhxEMJLQ5fqJTD5-0-8a513f58b7bd27fd4eb2dd9ea866b5c5)
到目前为止,我们已经实现了客户端发送数据和服务端打印,离本章开头提出的目标还差一半,接下来我们实现另外一半目标:服务端收到数据之后向客户端返回数据。