java rmi 开源_Java RMI的轻量级实现 - LipeRMI

Java RMI的轻量级实现 - LipeRMI

之前博主有记录关于Java标准库的RMI,后来发现问题比较多,尤其是在安卓端直接被禁止使用,于是转向了第三方的LipeRMI

注意到LipeRMI的中文教程比较少,这里记录一个demo,供自己复习,如果能帮到有需要的人那就更好了

LipeRMI优点

提供一个简单,可扩展框架和API

非常轻量级不依赖任何第三方包

安全可靠

提供类似于RMI的API,让程序只需做少量调整,就能够将RMI替换为LipeRMI

优化带宽使用率

优化客户端与服务器的通信(复用相同的socket并保持alive)

当面向连接的事件发生时,将触发预定的动作

架构

4cc30c6470bfbe4f6efe1c989aaa374b.gif

工程结构

➜ 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之类的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值