简单的java rpc_Java 简单的rpc 一
一,简单rpc 是基于Java socket 编程
ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务开启");while(true) {//开启一个服务监听
Socket socket =serverSocket.accept();
System.out.println(socket.getInetAddress()+"-connected");
InputStream in=socket.getInputStream();byte[] buf = new byte[1024];
in.read(buf);
//拿到序列化得数据byte[] formatDate =formatData(buf);
OutputStream out=socket.getOutputStream();
out.write(formatDate);
socket.close();
}
通过NetModel类保证从客户端传入的参数 包括 类的名称 方法名称 参数类型 参数
package org.Simple.API;
import java.io.Serializable;
import java.util.Arrays;
public class NetModel implements Serializable{
private static final long serialVersionUID = 1L;
private String className;
private String method;
private Object[] args ;
private String[] types;
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public Object[] getArgs() {
return args;
}
public void setArgs(Object[] args) {
this.args = args;
}
public String[] getTypes() {
return types;
}
public void setTypes(String[] types) {
this.types = types;
}
@Override
public String toString() {
return "NetModel [className=" + className + ", method=" + method + ", args=" + Arrays.toString(args)
+ ", types=" + Arrays.toString(types) + "]";
}
}
通过Java 反射 调用方法生成结果 在通过 serversocket 返回给客户端
try {
//将收到的byte数组反序列化为NetModel类型,然后通过反射调用HelloServiceImpl实现类的方法
NetModel netModel = (NetModel)SerializeUtils.deSerialize(bs);
//包点类名称
String className = netModel.getClassName();
//参数类型
String[] types = netModel.getTypes();
//参数
Object[] args = netModel.getArgs();
/*这里简单通过Map来做接口映射到实现类,从map中取
Map map = new HashMap();
map.put("org.Simple.API.HelloService", "org.Simple.S.HelloServiceImpl");
Class> clazz = Class.forName(map.get(className));
*/
//也可以把这个键值放到配置文件下,通过配置文件读取
Class> clazz = Class.forName(getPropertyValue(className));
Class> [] typeClazzs = null;
if(types!=null) {
typeClazzs = new Class[types.length];
for (int i = 0; i < typeClazzs.length; i++) {
typeClazzs[i] = Class.forName(types[i]);
}
}
Method method = clazz.getMethod(netModel.getMethod(),typeClazzs);
//方法调用 参数
Object object = method.invoke(clazz.newInstance(), args);
byte[] byteArray = SerializeUtils.serialize(object);
return byteArray;
} catch (Exception e) {
e.printStackTrace();
}
return null;
简单的java rpc_Java 简单的rpc 一相关推荐
- java 简单万年历,java万年历简单实例
本文实例讲述了JAVA实现的简单万年历. 实现思路具体如下: 已知1900年1月1日星期一判断是否闰年 指定年月返回当月的天数 返回一年的总天数 返回距离1900年1月到指定年月的上一个月的总天数 实 ...
- 简单hbase java,Hbase 简单java API 操作
package utils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.TableName ...
- 编写运行最简单的java程序——使用记事本编写java程序
编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...
- JAVA 判断简单密码算法_十道简单算法题二【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- 用java做一个简单记事本_用记事本写一个简单的java程序
用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...
- Intellij Idea创建一个简单的java项目
2016年11月12日 我即将要离开象牙塔(校园),踏入社会,想想未来我是某个公司的一个程序员,再对比一下小时的梦想,好像出入挺大的.今天我不得不为即将的工作准备,一个java开发工程师,但是我现在是 ...
- 一个简单的Java web服务器实现
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...
- java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)
用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...
- java实现简单窗体小游戏----球球大作战
java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: 坐标.大小.颜色.方向.速度 2.抽象类:Ball 设计类:BallMain-创建窗体 BallJPanel- ...
最新文章
- 23张图,带你入门推荐系统
- springside / springside4—CRUD页面教程
- 格式化的盘要怎么恢复数据
- 用计算器计算“异或CRC”
- python如何实现共享报表系统_使用python来实现报表自动化-阿里云开发者社区
- 【FZU - 2140 】Forever 0.5 (计算几何,构造)
- ai人工智能_人工智能能力问答中的人工智能不确定性
- 云栖日报丨收购中天微,阿里芯了解一下!
- 排列(permutation)的末尾 0 的个数
- JavaScript:设置网站title
- appium python很慢_appium+python自动化测试遇到的坑及处理方案
- linux系统计时,关于linux:计算机系统中的计时机制
- 小学听力测试英语软件,你知道有哪些软件适合给小学生练习在线英语听力吗?...
- mybatis --- 事务
- 计算机提示应用程序无法启动,告诉你电脑提示应用程序无法正常启动0x000007b怎么办...
- Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
- 一张图看懂阿里云网络产品[七]共享流量包
- Lession08 继承和多态
- Android霓虹灯文字控件
- 学习javacv入门示例2:访问Mat元素,对图像加盐处理