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

怎么做网盘搜索网站青岛海西建设集团官方网站

怎么做网盘搜索网站,青岛海西建设集团官方网站,泉州市做网站,装饰设计图片需求分析 使用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/125053/

相关文章:

  • 源码如何做网站宽甸县建设局网站
  • 用dw做的网页怎么连到网站上企业网站备案资料填写单
  • 中文 网站模板企业怎么建设网站
  • 建设户外腰包网站哪个网站注册域名好
  • 六安网站建设价格小学生编程网课前十名
  • 绵阳网站建设信赖辉煌wordpress多账号权限
  • 网站外链快速建设网站维护要学多久
  • 做网站都是用ps吗郑州网站设计培训
  • wordpress 多站点教程厦门做网站维护的公司
  • 婚纱网站建设需求分析wordpress js图片
  • seo网站怎么优化有哪些企业网站平台
  • 响应式中文网站欣赏wordpress 带分页的主题
  • 什么样的网站可以做站内站房地产的设计网站建设
  • 成都住房和城乡建设局 网站首页深圳西乡建网站
  • 商城类的网站一般怎么做开发app软件的步骤
  • 招聘网站做销售怎么样做网站后台学什么专业
  • 帮别人做彩票网站餐饮网站建设需求分析
  • 企业服务平台工程建设云深圳网站建设专业乐云seo
  • 怎么建立小公司网站抖音运营推广
  • 无锡地区做网站嵌入式软硬件开发
  • 网站建设框架怎么写企业网站本身应该就是企业( )的一部分
  • 如果做公司网站WordPress出现归档
  • 温州开发网站公司阿里云 拦截网站
  • 网站建设与管理实践实践报告南宁小程序建设
  • 网站后台功能技术要求网站建设 手机和pc
  • 嘉兴住房和城乡建设厅网站仿网站被封怎么办
  • 设计君seo查询怎么查
  • 购物网站ppt怎么做网站建设的申请理由
  • 美食网站要怎么做背景墙素材高清图片免费
  • 广东专业网站优化制作公司做编辑器的网站