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

Java面试题总结15之简述你对RPC,RMI的理解

RPC:在本地调用远程的函数,远程过程调用,可以跨语言实现,httpClient

RMI:远程方法调用,Java中用于实现RPC的一种机制,RPC的Java版本是J2EE的网络调用机制,跨JVM调用对象的方法,面向对象的思维方式

RMI实现:直接或间接实现接口Java.rmi.Remote 成为存在服务器端的远程对象,供客户端访问并提供一定的服务

远程对象必须实现Java.rmi.server.uniCastRemoteObject类,这样草能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为存根,而服务器端本身已存在的远程对象则称之为骨架,其实此时的存根时客户端的一个代理,用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接受客户端的请求之后调用远程方法来响应客户端的请求

import java.rmi.Remote;
import java.rmi.RemoteException;public  interface  IService extends Remote {String service(String content) throws RemoteException;
}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;public class IServiceImpl extends UnicastRemoteObject implements IService {private  String name;public  IServiceImpl(String name) throws  RemoteException {this.name = name;}@Overridepublic String service(String content) {return "server >>" + content;}
}
import javax.naming.Context;
import javax.naming.InitialContext;
public class Server {public static void main(String[] args) {try {IService service02 =    new IServiceImpl("service02");Context context = new InitialContext();context.rebind("rmi://127.0.0.1/service02",service02);} catch (Exception e) {e.printStackTrace();}System.out.println("00000");}
}
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;public class Client {public static void main(String[] args) {String url = "rmi://127.0.0.1/";try {Context  context = new InitialContext();IService service02 = (IService) context.lookup(url+"service02");Class stubClass = service02.getClass();System.out.println(service02 + "is" + stubClass.getName());Class[] interfaces = stubClass.getInterfaces();for (Class c : interfaces) {System.out.println("implement" +c.getName()+ "interface");}System.out.println(service02.service("hello"));} catch (Exception e) {e.printStackTrace();}}
}

http://www.lryc.cn/news/320575.html

相关文章:

  • 内网穿透利器 n2n 搭建指南
  • phpcms头像上传漏洞引发的故事
  • 二叉树|二叉树理论基础、二叉树的递归遍历
  • JavaScript 语法-对象
  • 代码随想录阅读笔记-哈希表【四数之和】
  • JVM学习——双亲委派机制
  • 【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题
  • Aloudata 倾力打造,《Data Fabric 白皮书 2.0》正式发布
  • docker内部无法使用ping等网络工具解决方案
  • 后端工程师快速使用vue和Element
  • 自学rabbitmq入门到精通
  • 由浅到深认识C语言(13):共用体
  • python爬虫(9)之requests模块
  • phpstudy自定义安装mysql8.3并启动
  • Netty 学习资料
  • 【概率论中的两种重要公式:全概率和贝叶斯】
  • python中的闭包
  • 成功解决RuntimeError: OpenSSL 3.0‘s legacy provider failed to load
  • 【 React 】React 组件之间如何通信?
  • 汇总全网免费API,持续更新(新闻api、每日一言api、音乐。。。)
  • Android SystemServer进程解析
  • Github主页设置贪吃蛇详细教程
  • 二、实现fastdfs文件上传与延迟删除功能的Spring Boot项目
  • Android FrameWork 学习路线
  • 前端开发者如何打造自己的生态以及ip
  • C语言实现一个两个数加减乘除的答题代码(含文件保存),用户增加,题目增加,题目测试,题目答题等等
  • YOLOv9改进策略:注意力机制 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点
  • 基于单片机的老人防丢系统设计
  • 从海外开发者大会的亲身体悟聊起,谈谈 AI 与开发者关系的重构 | 编码人声
  • HTML_CSS练习:HTML注释