基于netty实例演示NIO BIO 异步和同步
所属分类 netty
浏览量 1488
echo server
netty echo 例子 改造
增加编解码 DelimiterBasedFrameDecoder StringDecoder StringEncoder
收到消息 sleepxxx后 sleep xxx 毫秒后返回结果 ,模拟业务耗时操作
接收到消息后 ,直接提交给业务线程池处理
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
pool.submit(new Task(ctx, msg));
基于BIO 的 同步客户端
EchoClientSleepTest
final EchoClient client = new EchoClient(HOST,PORT);
// BIO 同步阻塞 request response 第一次请求处理完后 才能发第二次请求
// sleepxxx , 在服务端 sleep xxx 毫秒后 再返回结果 ,模拟业务耗时处理
String[]msgs = new String[]{"sleep3000","sleep2000","sleep1000","sleep500","sleep100"};
for(String msg:msgs){
System.out.println(client.doWriteLine(msg));
}
基于netty的 异步客户端
final NettyEchoClient client = new NettyEchoClient(HOST,PORT);
// 异步提交请求 ,不用等待响应结果
String[]msgs = new String[]{"sleep3000","sleep2000","sleep1000","sleep500","sleep100"};
for(String msg:msgs){
// doWriteLine 返回的是 ChannelFuture DefaultChannelPromise
System.out.println(msg+" send at "+LocalDateTime.now()+","+client.doWriteLine(msg));
}
// 响应快的先返回 ,异步处理
// 返回结果乱序 , 可以 利用 requestId 或 递增 id 来 关联结果
// received:sleep100
// received:sleep500
// received:sleep1000
// received:sleep2000
// received:sleep3000
完整代码
echo server
https://gitee.com/dyyx/netty4demo/tree/master/src/main/java/dyyx/echo
基于BIO 的 同步客户端
https://gitee.com/dyyx/netty4demo/blob/master/src/main/java/dyyx/test/EchoClientSleepTest.java
基于netty的 异步客户端
https://gitee.com/dyyx/netty4demo/blob/master/src/main/java/dyyx/test/NettyEchoClientSleepTest.java
上一篇
下一篇
netty ByteBuf 泄露实例
netty使用技巧
vert.x介绍
netty读写流量统计实例
netty空闲连接检测
netty 服务端启动日志