Java RMI的轻量级实现 - LipeRMI
Java RMI的轻量级实现 - LipeRMI
之前博主有记录关于Java标准库的RMI,后来发现问题比较多,尤其是在安卓端直接被禁止使用,于是转向了第三方的LipeRMI
注意到LipeRMI的中文教程比较少,这里记录一个demo,供自己复习,如果能帮到有需要的人那就更好了
LipeRMI优点
- 提供一个简单,可扩展框架和API
- 非常轻量级不依赖任何第三方包
- 安全可靠
- 提供类似于RMI的API,让程序只需做少量调整,就能够将RMI替换为LipeRMI
- 优化带宽使用率
- 优化客户端与服务器的通信(复用相同的socket并保持alive)
- 当面向连接的事件发生时,将触发预定的动作
架构

工程结构
➜ hellormi tree
.
├── HelloClient.java
├── HelloImpl.java
├── HelloServer.java
└── IHello.java
0 directories, 4 files
公用接口声明
IHello.java
package hellormi;
import java.util.Date;
public interface IHello {
String sayHello(String name);
Date getDate();
}
服务端实现类
HelloImpl.java
package hellormi;
import java.util.Date;
public class HelloImpl implements IHello {
@Override
public String sayHello(String name) {
return "Hello " + name;
}
@Override
public Date getDate() {
return new Date();
}
}
服务端开启服务主类
HelloServer.java
package hellormi;
import net.sf.lipermi.exception.LipeRMIException;
import net.sf.lipermi.handler.CallHandler;
import net.sf.lipermi.net.Server;
import java.io.IOException;
public class HelloServer {
public static void main(String[] args) {
// 远程实例
IHello proxy = new HelloImpl();
CallHandler callHandler = new CallHandler();
// 注册服务
try {
callHandler.registerGlobal(IHello.class, proxy);
} catch (LipeRMIException e) {
e.printStackTrace();
}
Server server = new Server();
// 绑定端口和服务
int port = 8888;
try {
server.bind(port, callHandler);
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端调用类
HelloClient.java
package hellormi;
import net.sf.lipermi.handler.CallHandler;
import net.sf.lipermi.net.Client;
import java.io.IOException;
public class HelloClient {
public static void main(String[] args) {
// 建立连接
CallHandler callHandler = new CallHandler();
String remoteHost = "127.0.0.1";
int port = 8888;
Client client = null;
try {
client = new Client(remoteHost, port, callHandler);
} catch (IOException e) {
e.printStackTrace();
}
// 获取远程实例,测试方法
assert client != null;
IHello remoteObj = (IHello) client.getGlobal(IHello.class);
System.out.println(remoteObj.sayHello("Tomcat"));
System.out.println(remoteObj.getDate());
}
}
测试结果
先在服务端开启服务,然后本地运行HelloClient.java
Hello Tomcat
Wed May 02 19:39:15 HKT 2018
小结
LipeRMI使用体验和Java标准库里的rmi类似,但依赖比较少,便于移植。也比较轻量独立,不用进行像原生rmi还要设置系统ip之类的操作。
Java RMI的轻量级实现 - LipeRMI的更多相关文章
- Exception thrown by the agent : java.rmi.server.ExportException: Port already in use
今天有个应用一直起不来,感觉配置都对啊,奇了怪了.看日志发现如下: STATUS | wrapper | 2017/01/04 08:09:31 | Launching a JVM...INFO | ...
- Java RMI之HelloWorld篇
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;
错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java ...
- JAVA RMI 实例
下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用. 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承Unicas ...
- JAVA RMI例子
RMI 是java语言的一个RPC框架,本文给出基础例子如下: 1.实现接口: public interface ICalc extends Remote { public int add(int p ...
- java.rmi.NoSuchObjectException: no such object in table
jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误:
- Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例
RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网 ...
- Java学习笔记(十六)——Java RMI
[前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...
随机推荐
- .NET Framework反射总结
概述 程序集的反射以及动态的创建类对象,是自动化编程常用的到知识原理,比如插件编程.模板设计模式,都可以采用发射机制动态的去创建实例化对象,实现类的动态加载.这里简单总结下,常用到的Framework ...
- .net core 中的 DependencyInjection - IOC
概要:因为不知道写啥,所以随便找个东西乱说几句,嗯,就这样,就是这个目的. 1.IOC是啥呢? IOC - Inversion of Control,即控制反转的意思,这里要搞明白的就是,它是一种思想 ...
- Spring boot自定义启动字符画(banner)
spring boot项目启动时会打印spring boot的ANSI字符画,可以进行自定义. 如何自定义 实现方式非常简单,我们只需要在Spring Boot工程的/src/main/resourc ...
- js与jquery常用数组方法总结
昨天被问数组方法的时候,问到sort()方法是否会改变原来的数组.本来我猜是不会,也是这么说,马上我又觉得,知识这种东西,不确定的时候直接说不确定或不知道就好,只是凭借着不确定的猜测或者是记忆,害人害 ...
- Oracle impdp的ignore及 fromuser / touser 功能
作者:eygle |English [转载时请标明出处和作者信息]|[恩墨学院 OCM培训传DBA成功之道]链接:http://www.eygle.com/archives/2009/09/oracl ...
- 关于mac的一些常用操作记录
之前记录过一个关于mac远程连接window机,实现共享文件的记录,今天记录一些常用的操作,会持续更新. 1.谷歌浏览器 f12的操作 command+option+i 打开调试面板 2.打开指定位置 ...
- .net core webapi 将localhost改成ip地址
用管理员身份运行vs 添加引用 using Microsoft.AspNetCore.Cors; 修改 public void Configure(IApplicationBuilder app, I ...
- asp gridview
<table> <tr> <td colspan="5">请选择试卷制定人员<span style="color:red&quo ...
- html-盒子模型及pading和margin相关
margin: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- 最短路(bellman)-hdu1217
Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的. 这时候,就需要使用其他的算法来求解最 ...