一,简单rpc 是基于Java socket 编程

  1. ServerSocket serverSocket = new ServerSocket(9999);
  2. System.out.println("服务开启");
  3. while(true) {
  4. //开启一个服务监听
  5. Socket socket = serverSocket.accept();
  6. System.out.println(socket.getInetAddress()+"-connected");
  7. InputStream in = socket.getInputStream();
  8. byte[] buf = new byte[1024];
  9. in.read(buf);

  10.          //拿到序列化得数据
  11. byte[] formatDate = formatData(buf);
  12.  
  13. OutputStream out = socket.getOutputStream();
  14. out.write(formatDate);
  15. socket.close();
    }

通过NetModel类保证从客户端传入的参数 包括 类的名称  方法名称  参数类型 参数

  1. package org.Simple.API;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Arrays;
  5.  
  6. public class NetModel implements Serializable{
  7.  
  8. private static final long serialVersionUID = 1L;
  9.  
  10. private String className;
  11.  
  12. private String method;
  13.  
  14. private Object[] args ;
  15.  
  16. private String[] types;
  17.  
  18. public String getClassName() {
  19. return className;
  20. }
  21.  
  22. public void setClassName(String className) {
  23. this.className = className;
  24. }
  25.  
  26. public String getMethod() {
  27. return method;
  28. }
  29.  
  30. public void setMethod(String method) {
  31. this.method = method;
  32. }
  33.  
  34. public Object[] getArgs() {
  35. return args;
  36. }
  37.  
  38. public void setArgs(Object[] args) {
  39. this.args = args;
  40. }
  41.  
  42. public String[] getTypes() {
  43. return types;
  44. }
  45.  
  46. public void setTypes(String[] types) {
  47. this.types = types;
  48. }
  49.  
  50. @Override
  51. public String toString() {
  52. return "NetModel [className=" + className + ", method=" + method + ", args=" + Arrays.toString(args)
  53. + ", types=" + Arrays.toString(types) + "]";
  54. }
  55. }

  通过Java 反射 调用方法生成结果 在通过 serversocket 返回给客户端

  1. try {
  2. //将收到的byte数组反序列化为NetModel类型,然后通过反射调用HelloServiceImpl实现类的方法
  3. NetModel netModel = (NetModel)SerializeUtils.deSerialize(bs);
  4. //包点类名称
  5. String className = netModel.getClassName();
  6. //参数类型
  7. String[] types = netModel.getTypes();
  8. //参数
  9. Object[] args = netModel.getArgs();
  10.  
  11. /*这里简单通过Map来做接口映射到实现类,从map中取
  12. Map<String, String> map = new HashMap<String,String>();
  13. map.put("org.Simple.API.HelloService", "org.Simple.S.HelloServiceImpl");
  14. Class<?> clazz = Class.forName(map.get(className));
  15. */
  16. //也可以把这个键值放到配置文件下,通过配置文件读取
  17. Class<?> clazz = Class.forName(getPropertyValue(className));
  18. Class<?> [] typeClazzs = null;
  19. if(types!=null) {
  20. typeClazzs = new Class[types.length];
  21. for (int i = 0; i < typeClazzs.length; i++) {
  22. typeClazzs[i] = Class.forName(types[i]);
  23. }
  24. }
  25.  
  26. Method method = clazz.getMethod(netModel.getMethod(),typeClazzs);
  27.  
  28. //方法调用 参数
  29. Object object = method.invoke(clazz.newInstance(), args);
  30.  
  31. byte[] byteArray = SerializeUtils.serialize(object);
  32.  
  33. return byteArray;
  34.  
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. return null;

  

Java 简单的rpc 一的更多相关文章

  1. Java简单的RPC实现(一)

    RPC使用java最基本的,传输层使用Socket,序列化使用Serializable,java 动态代理模式,但是未实现消息注册等相关信息 大道至简 server端 package com.rpc. ...

  2. Java 简单的RPC 实现

    借用了网上某大神的例子.... 目录结构是这样的... RpcFramework 主要是两个方法.一个是暴露服务,一个为引用服务.暴露服务的主要作用是声明一个接口的实现类.可以通过socket 远程调 ...

  3. 分布式架构的基石.简单的 RPC 框架实现(JAVA)

    前言 RPC 的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务. 学习来源:<分布式系统架构:原理与实践> - 李林锋 1. ...

  4. Java实现简单的RPC框架(美团面试)

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

  5. Java使用Netty实现简单的RPC

    造一个轮子,实现RPC调用 在写了一个Netty实现通信的简单例子后,萌发了自己实现RPC调用的想法,于是就开始进行了Netty-Rpc的工作,实现了一个简单的RPC调用工程. 如果也有兴趣动手造轮子 ...

  6. 最简单的RPC框架实现

    通过java原生的序列化,Socket通信,动态代理和反射机制,实现一个简单的RPC框架,由三部分组成: 1.服务提供者,运行再服务端,负责提供服务接口定义和服务实现类 2.服务发布者,运行再RPC服 ...

  7. Java自带RPC实现,RMI框架入门

    Java自带RPC实现,RMI框架入门 首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种 ...

  8. 面试题思考:Java RMI与RPC,JMS的比较

    RPC:(Remote Procedure Call)  被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异. 支持多语言 RMI:(Remote Method Invo ...

  9. 如何实现一个简单的RPC

    在如何给老婆解释什么是RPC中,我们讨论了RPC的实现思路. 那么这一次,就让我们通过代码来实现一个简单的RPC吧! RPC的实现原理 正如上一讲所说,RPC主要是为了解决的两个问题: 解决分布式系统 ...

随机推荐

  1. C# Request 获取Url

    1.获取页面,HttpContext.Current.Request也是Request //获取当前页面url string myurl = System.Web.HttpContext.Curren ...

  2. 前端框架React Js入门教程【精】

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  3. JavaScript(ES5)使用保留字作函数名

    ES5同意直接使用保留字作为属性名.但却不同意直接使用保留字作为函数名 设现有类NSMap,若要给NSMap的原型加delete方法,如 function NSMap(){ } NSMap.proto ...

  4. Java知识回顾 (6)正则表达式、方法、文件与异常

    一.正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java 正则表达式和 Perl 的是最为相似 ...

  5. 【Qt5】Windows下配置程序的产品、公司、版权、版本号等详细信息

    在工程的pro文件中加入下面的配置 # 配置图标(仅Windows有效)# 本程序使用两个图标,这样其快捷方式可以有更多选择,也可以给关联文件提供图标选择RC_ICONS += icon1.ico \ ...

  6. XMPP接受发送消息

    在现阶段的通信服务中,各种标准都有,因此会出现无法实现相互连通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互 ...

  7. 【Little Demo】左右按钮tab选项卡双切换

    通过前一篇文章 从简单的Tab标签到Tab图片切换 的说明,相关效果也就可以实现了. 1.左右按钮tab选项卡双切换 很明显,左右两个按钮是 absolute 布局,另外就是内容部分和Tab标签部分. ...

  8. Dubbo的使用入门

    一.包引入 1.父模块pom.xml中加入依赖: <!-- dubbo --> <dependency> <groupId>com.alibaba.boot< ...

  9. SoapUI Pro Project Solution Collection-Test Step Object

    Package com.eviware.soapui.model.testsuite used for access the current testsuite object, like test c ...

  10. cmd adb批量安装与卸载

    批量安装: SET dir=%~dp0echo dir is: %dir%cd /d %dir%for /R %dir% %%i in (*.apk) do adb install %%i 批量卸载: ...