当前位置: 首页 > news >正文

怎么做hs网站淘宝店铺购买价格

怎么做hs网站,淘宝店铺购买价格,搬瓦工ss wordpress,短网站生成需求分析 使用netty实现方法远程调用, 在client调用本地接口中方法时, 使用反射进行远程调用, server执行完结果后, 将执行结果进行封装, 发送到client RPC调用模型: 1. 服务消费方(client)以本地调用方式调用服务 2. client stub 接收到调用后负责将方法、参数等封装成能够…需求分析 使用netty实现方法远程调用, 在client调用本地接口中方法时, 使用反射进行远程调用, server执行完结果后, 将执行结果进行封装, 发送到client RPC调用模型: 1. 服务消费方(client)以本地调用方式调用服务 2. client stub 接收到调用后负责将方法、参数等封装成能够进行网络传输的消息体 3. client stub 将消息进行编码并发送到服务端 4. server stub 收到消息后进行解码 5. server stub 根据解码结果调用本地的服务 6. 本地服务执行并将结果返回给 server stub 7. server stub 将返回导入结果进行编码并发送至消费方 8. client stub 接收到消息并进行解码 9. 服务消费方(client)得到结果自定义RPC结构 根据上面执行流程图, 编写代码 定义request消息结构: /*** 封装class信息, 用于反射过程, 封装client的request*/ public class ClassInfo implements Serializable {private String className;private String methodName;//参数类型private Class?[] type;//参数列表private Object[] objects;public ClassInfo(String className, String methodName, Class?[] type, Object[] objects) {this.className className;this.methodName methodName;this.type type;this.objects objects;}public String getClassName() {return className;}public String getMethodName() {return methodName;}public Class?[] getType() {return type;}public Object[] getObjects() {return objects;} }Client client接口: public interface HelloRpc {String hello(String name); }client的代理类: public class NettyRpcProxy {/*** 创建代理对象* param target* return*/public static Object create(Class target) {//动态代理, 在代理过程中执行远程数据发送return Proxy.newProxyInstance(target.getClassLoader(), new Class[]{target},(proxy, method, args) - {//定义要调用哪一个方法的信息ClassInfo classInfo new ClassInfo(target.getName(), method.getName(), method.getParameterTypes(), args);NioEventLoopGroup workGroup new NioEventLoopGroup();MyClientResultHandler myClientResultHandler new MyClientResultHandler();Bootstrap bootstrap new Bootstrap().group(workGroup).channel(NioSocketChannel.class).handler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {ChannelPipeline pipeline ch.pipeline();pipeline.addLast(encoder, new ObjectEncoder());pipeline.addLast(decoder, new ObjectDecoder(Integer.MAX_VALUE, ClassResolvers.cacheDisabled(null)));pipeline.addLast(myClientResultHandler);}});ChannelFuture channelFuture bootstrap.connect(127.0.0.1, 9999).sync();//client进行发送channelFuture.channel().writeAndFlush(classInfo).sync();channelFuture.channel().closeFuture().sync();return myClientResultHandler.getResponse();});} }client的handler: public class MyClientResultHandler extends ChannelInboundHandlerAdapter {private Object response;public Object getResponse() {return response;}//读取从Server发送过来的执行结果Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {response msg;ctx.close();} }Server server接口(该接口与client的接口是一样的): public interface HelloRpc {String hello(String name); }server接口实现类: public class HelloRpcImpl implements HelloRpc {Overridepublic String hello(String name) {return hello name;} }server端: /*** 网络处理服务器*/ public class NettyRpcServer {private final int port;public NettyRpcServer(int port) {this.port port;}public void start() {EventLoopGroup bossGroup new NioEventLoopGroup();EventLoopGroup workGroup new NioEventLoopGroup();ServerBootstrap serverBootstrap new ServerBootstrap().group(bossGroup, workGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {ChannelPipeline pipeline ch.pipeline();//对象编码器, 底层使用Java序列化, 效率低下, 通常使用protobufpipeline.addLast(encoder, new ObjectEncoder());pipeline.addLast(decoder, new ObjectDecoder(Integer.MAX_VALUE, ClassResolvers.cacheDisabled(null)));pipeline.addLast(new MyInvokeHandler());}});try {ChannelFuture channelFuture serverBootstrap.bind(port).sync();System.out.println(server is ready);channelFuture.channel().closeFuture().sync();} catch (InterruptedException e) {e.printStackTrace();} finally {bossGroup.shutdownGracefully();workGroup.shutdownGracefully();}}public static void main(String[] args) {new NettyRpcServer(9999).start();}}server的MyInvokeHandler(解析从client发送的内容): /*** 封装client调用方法后执行结果*/ public class MyInvokeHandler extends ChannelInboundHandlerAdapter {Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {//使用反射机制, 调用本地方法实现类, 将方法执行结果封装, 发送至clientClassInfo classInfo (ClassInfo) msg;Object clazz Class.forName(this.getImplClassName(classInfo)).newInstance();Method method clazz.getClass().getMethod(classInfo.getMethodName(), classInfo.getType());Object result method.invoke(clazz, classInfo.getObjects());ctx.writeAndFlush(result);}//根据ClassInfo反射获取对应method执行结果private String getImplClassName(ClassInfo classInfo) throws ClassNotFoundException {String interfacePath com.regotto.test.netty_test_rpc.server.fun;int lastIndexOf classInfo.getClassName().lastIndexOf(.);String interfaceName classInfo.getClassName().substring(lastIndexOf);Class superClass Class.forName(interfacePath interfaceName);Reflections reflections new Reflections(interfacePath);//获得该接口下的所有实现类SetClass? implClassSet reflections.getSubTypesOf(superClass);if (implClassSet.size() 0) {System.out.println(未找到实现类, erro);return null;} else if (implClassSet.size() 1) {System.out.println(实现类存在多个, 未指明使用哪一个);return null;}return (implClassSet.toArray(new Class[0]))[0].getName();} }Client测试类 /*** 测试*/ public class TestNettyRpc {public static void main(String[] args) {//反射调用HelloNetty helloNetty (HelloNetty) NettyRpcProxy.create(HelloNetty.class);System.out.println(helloNetty.hello());} }执行结果: 总结 RPC机制: 1.Client使用动态代理机制, 将本地接口信息编码封装发送至Server 2.Server将接收到的信息解码, 根据反射机制获得方法执行结果, 然后将执行结果编码封装发送至Client 3.Client解析Server发送的执行结果
http://www.zqtcl.cn/news/442311/

相关文章:

  • 如何检查网站是否做cdn加速html网页基础代码
  • 做网站的岗位好吗钓鱼网站到底怎么做
  • 大连做网站那个公司最好wordpress+高清背景
  • 怎样做网站xml案例建网站
  • 海口发布最新通告用二级域名做网站对seo
  • 网站301重定向 权重转移网站不用下载免费软件
  • 网站系统升级昆明做百度网站电话
  • 电子商务与网站建设实践论文wordpress 主题目录
  • 网站页面打不开中小企业网站推广
  • 佛山建网站企业网站怎么维护
  • 网站制作报价明细wordpress喜欢
  • 网站开发2008文化传播有限公司网站建设
  • 个人账号如何注册网站广州专业网站改版设计公司
  • wordpress视频网站采集沈阳建设工程质量检测中心网站
  • 做网站优化哪家好远程管理wordpress站群
  • 实用写作网站做企业策划的公司
  • 如何建立自己手机网站58招聘网站官网
  • 网站程序源码下载网站怎么做定位功能
  • 深圳vi设计公司联系西安seo诊断
  • 老虎淘客系统可以做网站吗绍兴网站专业制作
  • 小公司做网站需要 align center
  • 自己做的网站怎么上传网络什么网站可以找人做系统
  • 公司在兰州要做网站怎样选择做期货关注什么网站
  • 响应式网站是指自适应吗新开传奇网站首区
  • 做网站产品介绍wordpress 参数 传递
  • 网站颜色搭配技巧建设摩托车价格大全
  • 哪些网站可以做画赚钱宁波模板建站定制
  • 昆明门户网站建设wordpress权限设置
  • 设计网站建设图片wordpress博客置顶
  • 网站上海网站建设网站数据建设涉及哪些内容