首页 > 其他分享 >RMI简单学习

RMI简单学习

时间:2024-09-25 14:23:46浏览次数:1  
标签:rmi java public 学习 简单 import RMI 远程 服务端

简单的说一下rmi的原理

接口,必须要有实现接口

package rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IHello extends Remote {
    public String sayHello(String name) throws RemoteException;
}

首先是服务端,服务端的流程就是,

  • 服务端创建远程对象:服务端定义一个远程接口和实现类,实现类继承自 UnicastRemoteObject 并实现远程接口的方法。
  • 服务端注册远程对象:服务端使用 LocateRegistry.createRegistry() 启动 RMI 注册表,然后使用 Naming.rebind() 将远程对象绑定到注册表中
package rmi;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

public class RMIServer {
    public class RMIHello extends UnicastRemoteObject implements IHello{
        protected RMIHello() throws RemoteException{
            super();
        }

        @Override
        public String sayHello(String name) throws RemoteException{
            System.out.println("Hello,World");
            return name;
        }
    }

    private void register() throws Exception{
        RMIHello rmiHello = new RMIHello();
        LocateRegistry.createRegistry(1099);
        Naming.bind("rmi://0.0.0.0:1099/hello",rmiHello);
        System.out.println("Registry运行中......");
    }

    public static void main(String[] args) throws Exception{
        new RMIServer().register();
    }

}

 

客户端的流程就是

  • 客户端查找远程对象:客户端使用 Naming.lookup() 查找远程对象,并通过它来调用远程方法。
  • 处理远程异常:在远程方法调用中可能会抛出 RemoteException,所以无论是在服务端还是客户端都需要处理这些异常。
    package rmi;
    
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    public class RMIClient {
        public static void main(String[] args) throws Exception{
            Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
            IHello iHello = (IHello) registry.lookup("hello");
            System.out.println(iHello.sayHello("Feng"));
    
        }
    }

    整体原理就是:服务端通过启动注册表,绑定远程对象,然后在使客户端查找这个对象,来调用远程方法

标签:rmi,java,public,学习,简单,import,RMI,远程,服务端
From: https://www.cnblogs.com/A8k1a4/p/18431283

相关文章

  • SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用FI
    合集-C#(80)1.使用C#将几个Excel文件合并去重分类2023-11-152.C#使用SqlSugar操作MySQL数据库实现简单的增删改查2023-11-163.C#中的类和继承2023-11-174.C#中的virtual和override关键字2023-11-175.C#中的属性2023-11-206.C#winform中使用SQLite数据库2023-11-237.C#简化工作之......
  • 【万字文档+PPT+源码】基于springboot+vue二手交易平台-可用于毕设-课程设计-练手学习
    博主简介:......
  • 这些年没来得及学习的一些 HTML5 标签
    这些年没来得及学习的一些HTML5标签 认识并学习下还没来得及学习的一些HTML5标签<ruby> 标签HTML <ruby> 元素被用来展示东亚文字注音或字符注释。比如:<ruby>兄弟<rt>xiongdi</rt></ruby><rt> 元素包含字符的发音,字符在ruby注解中出现,它用于描述东亚字符的......
  • Android Studio制作简单登录界面
    实现目标应用线性布局设计登录界面,要求点击输入学号时弹出数字键盘界面,点击输入密码时弹出字母键盘,出现的文字、数字、尺寸等全部在values文件夹下相应.xml文件中设置好,使用时直接引用。当用户名或密码为空,显示一个提示信息“用户名与密码不能为空!”,当用户名和密码匹配,显示“登录......
  • 大语言模型(LLM)入门学习路线图
    Github项目上有一个大语言模型学习路线笔记,它全面涵盖了大语言模型的所需的基础知识学习,LLM前沿算法和架构,以及如何将大语言模型进行工程化实践。这份资料是初学者或有一定基础的开发/算法人员入门活深入大型语言模型学习的优秀参考。这份资料重点介绍了我们应该掌握哪些核......
  • SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索
    SimpleAISearch:C#+DuckDuckGo实现简单的AI搜索 合集-C#(79)  最近AI搜索很火爆,有Perplexity、秘塔AI、MindSearch、Perplexica、memfree、khoj等等。在使用大语言模型的过程中,或许你也遇到了这种局限,就是无法获取网上最新的信息,导致回答的内容不是基于最新的信......
  • 初步学习async/await,Task.GetAwaiter,Task.Result
    初步学习async/await,Task.GetAwaiter,Task.Result   网上关于async/await的知识有很多,看了很多但不如自己实践一遍来得快,所以这里记录下我的理解和大家学习下。  首先以最简单的同步方法来开始如下privatestaticvoidTest(){Console.Wr......
  • ASP.NET Core SignalR :学习消息通讯,实现一个消息通知
    ASP.NETCoreSignalR:学习消息通讯,实现一个消息通知  什么是SignalR    目前我用业余时间正在做一个博客系统,其中有个功能就是评论通知,就是假如A用户评论B用户的时候,如果B用户首页处于打开状态,那么就会提示B用户有未读消息。暂时用SignalR来实现这个功能。我也是......
  • SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用
    SimpleAIAgent是基于C#SemanticKernel与WPF构建的一款AIAgent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AIAgent应用的探索学习,希望能够帮助到感兴趣的朋友。接下来我想分享一下我的AIAgent应用实践。翻译文本并将文本存入文件第一个例子是翻译文本,并将......
  • 『不走弯路』Unity学习路线(主程方向)
    『不走弯路』Unity学习路线(主程方向)大智Unity技术探路者/VX:zhz11235关注阅读6034 2023年4月24日 不走弯路,学Unity从小白到大师的路线是什么?本学习路线由大智(vx:zhz11235)凭个人经验编写,仅供参考,欢迎找大智交流(......