首页 > 其他分享 >简述你对RPC,RMI的理解

简述你对RPC,RMI的理解

时间:2024-03-14 20:59:02浏览次数:20  
标签:service02 rmi String 简述 RPC import RMI public 客户端

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;
   }

    @Override
    public 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();
        }

    }
}

标签:service02,rmi,String,简述,RPC,import,RMI,public,客户端
From: https://blog.csdn.net/weixin_51627264/article/details/136719410

相关文章

  • 模板匹配——determine_shape_model_params
    determine_shape_model_params—Determinetheparametersofashapemodel.模版匹配参数确定 determine_shape_model_paramsdeterminescertainparametersofashapemodelautomaticallyfromthemodelimageTemplate.Theparameterstobedeterminedcanbesp......
  • HDFSRPC协议详解
    本文主要阐述HDFSRPCserver端一个socket连接接收字节流的构成,帮助读者理解HDFSRPC协议。注意hadoop版本为3.1.1。写在前面关于proto写入和读取,使用writeDelimitedTo和read,应该是通用的方式,不作过多的介绍。处理rpc各种情况以后server都会使用统一的应答格式(包含错误与正确),......
  • 斯图特STUDER手柄PCU TerminaI维修指导分析
    一、斯图特STUDER手柄PCUTerminaI常见故障及原因分析显示屏故障:显示屏不亮、显示内容异常或闪烁。可能原因包括电源线松动、显示屏损坏或内部连接不良。按键失灵:按键无反应或反应不灵敏。可能是由于按键面板损坏、按键触点脏污或老化所致。通信故障:斯图特STUDER手柄PCUTermi......
  • Golang - grpc和http的区别
    gRPC和HTTP都是网络协议,但是它们之间存在一些显著的区别。1、传输协议HTTP使用文本基础的协议,而gRPC使用的是二进制协议,这意味着gRPC数据包更小,传输效率更高。另外,gRPC使用HTTP/2协议,支持多路复用,从而可以更好地处理并发请求。2、性能差异gRPC在性能方面优于HTTP。由于使用了二进......
  • 常用的Docker命令及其用途简述
    记录常用的Docker命令及其用途在日常的开发和运维工作中,Docker和docker-compose已经成为了不可或缺的工具。它们帮助我们轻松地构建、运行和管理容器化的应用程序。在这篇随笔中,我将记录下一些我常用的Docker和docker-compose命令,并简述它们的用途,并在每一个命令后面加上一条示例......
  • Gossip协议和Grpc协议的区别
    Gossip协议Gossip协议,也称为流言协议,是一种基于成员之间随机通信的分布式系统同步协议。它模仿社会中流言的传播方式,通过节点之间的随机交互传播信息,以此实现数据的最终一致性。Gossip协议特别适合于大规模、分布式的环境中,因为它能够很好地处理节点故障和网络分区问题。特点:......
  • 简述Helm及其优势
    Helm是Kubernetes的软件包管理工具,Helm能够将一组K8S资源打包统一管理,是查找、共享和使用为Kubernetes构建的软件的最佳方式。Helm中通常每个包称为一个Chart,一个Chart是一个目录,优势:1)统一管理、配置和更新这些分散的k8s的应用资源文件;2)分发和复用一套应用模板;3)将应用的一......
  • 简述Kubernetes各模块如何与API Server通信
    K8sAPIServer作为集群的核心,负责集群各功能模块之间的通信。集群内的各个功能模块通过APIServer将信息存入etcd,当需要获取和操作这些数据时,则通过APIServer提供的REST接口(用GET、LIST或WATCH方法)来实现,从而实现各模块之间的信息交互。1)kubelet进程与APIServer的交互:每个Nod......
  • 简述Kubernetes准入机制
    在对集群进行请求时,每个准入控制代码都按照一定顺序执行。如果有一个准入控制拒绝了此次请求,那么整个请求的结果将会立即返回,并提示用户相应的error信息,准入控制(AdmissionControl)准入控制本质上为一段准入代码,在对kubernetesapi的请求过程中,顺序为:先经过认证&授权,然后执行准入......
  • 简述Kubernetes如何保证集群的安全性
    1)基础设施方面:保证容器与其所在宿主机的隔离;2)用户权限:划分普通用户和管理员的角色;3)APIServer的认证授权:Kubernetes集群中所有资源的访问和变更都是通过KubernetesAPIServer来实现的,因此需要建议采用更安全的HTTPS或Token来识别和认证客户端身份(Authentication),以及随后访问权......