基于Netty5.0高级案例之请求响应同步通信
来源:互联网 发布:电视阿里云系统好不好 编辑:程序博客网 时间:2024/06/05 03:48
前言介绍:
netty是异步通信,但是有些场景下我们需要发送同时接收服务端反馈并做处理。例如dubbo就有这样的场景,当然他不一定和我下面的例子方式一样,dubbo中有一个场景是代理你的调用方法,通过nettysocket直连到生产者,生产者处理后反馈消息,这样你就感受不到自己是异步调用的方法。
环境需求:
netty5.0、jdk1.6、idea、maven (truest me an old driver这些你都有,没有就别往下看也没意思)
代码介绍:
工程截图
代码介绍
主要依靠future类处理
org.itstack.demo.netty.test.client.Start
ClientSocket client = new ClientSocket();
Thread thread = new Thread(client);
thread.start();
while (true) {
try {
//获取future,线程有等待处理时间
if (null == future){
future = client.getFuture();
Thread.sleep(500);
continue;
}
//构建发送参数
Response response = new Response();
response.setResult("查询用户信息");
SyncWrite s = new SyncWrite();
Request request = s.writeAndSync(future.channel(), response, 1000);
System.out.println("调用结果:"+JSON.toJSON(request));
Thread.sleep(1000);
} catch (Exception e) {
}
}
org.itstack.demo.netty.client
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.itstack.demo.netty.future.SyncWriteFuture;
import org.itstack.demo.netty.future.SyncWriteMap;
import org.itstack.demo.netty.msg.Request;
/**
* Created by fuzhengwei1 on 2016/10/20.
*/
public class MyClientHandler extends SimpleChannelInboundHandler<Request> {
@Override
protected void messageReceived(ChannelHandlerContext ctx, Request msg) throws Exception {
String requestId = msg.getRequestId();
SyncWriteFuture future = (SyncWriteFuture) SyncWriteMap.syncKey.get(requestId);
if (future != null) {
future.setResponse(msg);
}
}
}
测试结果:
调用结果:{"requestId":"c18b6709-db9c-45ed-9d20-7780cf9c35e0","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"78d48e8e-b371-41e0-9a50-6d8d65e47274","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"16693303-0f49-4089-858f-b5f6a0909a7c","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"bbae4eb6-32de-4357-8e15-e20e058b7f5a","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"87ee5a7a-ede8-425a-a952-2461e4448022","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"bcd76aaf-33be-4911-bd8b-87b8d49807c0","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"94678494-3136-48dd-a88b-2d7c8b5b4579","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"8f6368f8-f436-4a45-a10a-d5e31ba98d02","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
调用结果:{"requestId":"69af324c-9c7d-4523-9461-30ae15656754","param":"查询用户信息 请求成功,反馈结果请接受处理。"}
下载源码:http://itstack.qiniudn.com/itstack-demo-netty-future.rar
0 0
- 基于Netty5.0高级案例之请求响应同步通信
- 基于Netty5.0高级案例一之NettyWebsocket
- 基于Netty5.0高级案例一之NettyWebsocket
- Netty之——基于Netty5.0高级案例NettyWebsocket
- 基于Netty5.0高级案例二之WebSocket中关于使用ProtoBuf传输数据介绍js部分
- 基于Netty5.0入门案例一之NettyServer
- 基于Netty5.0入门案例二之NettyServer接收数据
- 基于Netty5.0中级案例一之Netty与Web
- 基于Netty的“请求-响应”同步通信机制实现
- 基于Netty的“请求-响应”同步通信机制实现
- 基于Netty5的RPC架构笔记4之案例讲解
- 基于Netty5.0案例八服务端心跳包
- netty5.0之Client端与Server端通信
- netty5.0之EventLoop
- 掌握Ajax 之 Ajax 中的高级请求和响应
- ajax学习系列之三: 中的高级请求和响应
- netty5.0之SingleThreadEventLoop & NioEventLoop
- 【网络通信:Volley】请求的发送与响应之String
- could not find com.android.tools.build:gradle:2.2.3
- Spring Cloud 组件搭建(一)Eureka服务发现
- 模拟留言本————代码实现
- Python之字符串
- 226. Invert Binary Tree
- 基于Netty5.0高级案例之请求响应同步通信
- linux20基本命令
- 关系型数据库三范式
- Python中类的方法属性与方法属性的动态绑定
- vs 调试的时候提示和源码对应不上,断点不起作用
- 【数据结构】二叉树的后序遍历
- com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector
- 对绝对路径与相对路径的理解
- 动作标签