一,简单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 一相关推荐

  1. java 简单万年历,java万年历简单实例

    本文实例讲述了JAVA实现的简单万年历. 实现思路具体如下: 已知1900年1月1日星期一判断是否闰年 指定年月返回当月的天数 返回一年的总天数 返回距离1900年1月到指定年月的上一个月的总天数 实 ...

  2. 简单hbase java,Hbase 简单java API 操作

    package utils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.TableName ...

  3. 编写运行最简单的java程序——使用记事本编写java程序

    编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...

  4. JAVA 判断简单密码算法_十道简单算法题二【Java实现】

    前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...

  5. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  6. Intellij Idea创建一个简单的java项目

    2016年11月12日 我即将要离开象牙塔(校园),踏入社会,想想未来我是某个公司的一个程序员,再对比一下小时的梦想,好像出入挺大的.今天我不得不为即将的工作准备,一个java开发工程师,但是我现在是 ...

  7. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  8. java简单通讯录的实现02person类_用java实现简单的小游戏(你一定玩过)

    用java实现简单的小游戏(你一定玩过) 对于java初学者来说,通过一些学习小游戏来对swing学习以及对java基础的学习是一个好的方法,同时也给学习带来了很多的乐趣,接下来就给大家分享一个jav ...

  9. java实现简单窗体小游戏----球球大作战

    java实现简单窗体小游戏----球球大作战 需求分析 1.分析小球的属性: ​ 坐标.大小.颜色.方向.速度 2.抽象类:Ball ​ 设计类:BallMain-创建窗体 ​ BallJPanel- ...

最新文章

  1. 23张图,带你入门推荐系统
  2. springside / springside4—CRUD页面教程
  3. 格式化的盘要怎么恢复数据
  4. 用计算器计算“异或CRC”
  5. python如何实现共享报表系统_使用python来实现报表自动化-阿里云开发者社区
  6. 【FZU - 2140 】Forever 0.5 (计算几何,构造)
  7. ai人工智能_人工智能能力问答中的人工智能不确定性
  8. 云栖日报丨收购中天微,阿里芯了解一下!
  9. 排列(permutation)的末尾 0 的个数
  10. JavaScript:设置网站title
  11. appium python很慢_appium+python自动化测试遇到的坑及处理方案
  12. linux系统计时,关于linux:计算机系统中的计时机制
  13. 小学听力测试英语软件,你知道有哪些软件适合给小学生练习在线英语听力吗?...
  14. mybatis --- 事务
  15. 计算机提示应用程序无法启动,告诉你电脑提示应用程序无法正常启动0x000007b怎么办...
  16. Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
  17. 一张图看懂阿里云网络产品[七]共享流量包
  18. Lession08 继承和多态
  19. Android霓虹灯文字控件
  20. 学习javacv入门示例2:访问Mat元素,对图像加盐处理

热门文章

  1. PHP 学习笔记 01
  2. 关于Installshield里一些常见问题的解答—艾泽拉斯之海洋女神出品
  3. db2 CLP中如何换行啊
  4. 5月15日的硬分叉将会给BCH带来什么?
  5. 轻量级自动化运维工具Fabric的安装与实践
  6. 查询慢 跑批慢 性能低怎么办? | 润乾高性能计算专家
  7. 到底会改名吗?微软GVFS 改名之争
  8. Ubuntu下压缩解压文件
  9. 03_NoSQL数据库之Redis数据库:list类型
  10. 火狐 IE 解析xmlDOM 的不同写法