作者:muggle
netty框架代码很猛(读源码有益身心健康),学习起来也比较难;在阅读这篇文章我假设你有了一定nio基础,tcp网络协议基础,否则不建议阅读。
关于netty的学习视频我推荐B站张龙的教学视频,讲的很不错。学netty之前先学会用,然后在去看他的原理这样学起来会轻松不少。
http demo
用netty实现一个http服务端
编写main函数
1 | public class TestNetty { |
编写初始化器
1 | // 初始化器 channel注册好之后 自动创建 执行代码 |
编写数据处理器
1 | public class TestHttpServerHandler extends SimpleChannelInboundHandler<HttpObject> { |
说明:
我们来看一下构造一个http服务端,都需要干些啥。
在main函数中,我们创建了两个线程组NioEventLoopGroup
,boss线程组负责接收请求,work线程组负责处理请求。ServerBootstrap
服务端配置辅助器进行服务端配置,绑定端口号。
初始化器ChannelInitializer<SocketChannel>
对管道设置各种处理器,数据处理器SimpleChannelInboundHandler<HttpObject>
的channelRead0
方法处理数据,调用channelHandlerContext.writeAndFlush
将数据写入通道,其他重写的方法看代码便能知道是干嘛的
socket demo
socket连接步骤大同小异
编写server的main函数
1 | public static void main(String[] args) { |
编写初始化器
1 | public class MyServerInitializer extends ChannelInitializer<SocketChannel> { |
编写数据处理器
1 |
|
编写client 的main
1 | public static void main(String[] args) { |
其他和服务端一样,所以略;
服务端启动类serverBootstrap.bind(8081).sync()
而客户端启动类配置是ChannelFuture sync = bootstrap.connect("127.0.0.1",8081).sync();
区别就在这里
websocket demo
github netty模块 下有所有代码