首页  

基于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 服务端启动日志