- 浏览: 53007 次
- 性别:
文章分类
最新评论
RPC的全称:Remote Process Call,即远程过程调用,拥有RMI、webService等诸多成熟方案。
如图:
实现代码如下:
User代码:
consumer.java代码
Provider代码:
接口HelloSayService.java
接口service实现代码:
如图:
实现代码如下:
User代码:
package com.test.xulihua; import java.io.Serializable; /** * Created with IntelliJ IDEA. * User: * Date: 2018/3/19 * Time: 11:16 * To change this template use File | Settings | File Templates. */ public class User implements Serializable{ private String name; private int age; private boolean sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } }
consumer.java代码
package com.test.xulihua; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Method; import java.net.Socket; /** * Created with IntelliJ IDEA. * User: * Date: 2018/3/19 * Time: 10:40 * To change this template use File | Settings | File Templates. */ public class Consume { public static void main(String[] args) throws IOException, NoSuchMethodException, ClassNotFoundException { Socket socket = new Socket("127.0.0.1",8888); ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream()); String interfaceName = HelloSayService.class.getName(); Method method = HelloSayService.class.getMethod("helloSay",User.class); User user =new User(); user.setName("王五"); Object[] params = {user}; outputStream.writeUTF(interfaceName); //接口名称 outputStream.writeUTF(method.getName()); //方法名称 outputStream.writeObject(method.getParameterTypes()); outputStream.writeObject(params); ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); User object = (User) inputStream.readObject(); System.out.println(object.getName()+":"+object.getAge()+":"); } }
Provider代码:
package com.test.xulihua; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Map; /** * Created with IntelliJ IDEA. * User: * Date: 2018/3/19 * Time: 10:38 * To change this template use File | Settings | File Templates. */ public class ServerProvide { private static Map<String,Object> services= new HashMap<String, Object>(); static{ services.put(HelloSayService.class.getName(),new HelloSayServiceImpl()); } public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InterruptedException { ServerSocket serverSocket = new ServerSocket(8888); while (true){ Thread.sleep(1000L); Socket socket = serverSocket.accept(); ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); String interfaceName = inputStream.readUTF(); String methodName = inputStream.readUTF(); Class<?>[] paramterType = (Class<?>[]) inputStream.readObject(); Object[] paramter = (Object[]) inputStream.readObject(); Class serviceClass = Class.forName(interfaceName); Object service = services.get(interfaceName); Method method = serviceClass.getMethod(methodName,paramterType); Object result = method.invoke(service,paramter); ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream()); outputStream.writeObject(result); } } }
接口HelloSayService.java
package com.test.xulihua; /** * Created with IntelliJ IDEA. * User: * Date: 2018/3/19 * Time: 10:35 * To change this template use File | Settings | File Templates. */ public interface HelloSayService { public User helloSay(User user); }
接口service实现代码:
package com.test.xulihua; /** * Created with IntelliJ IDEA. * User: * Date: 2018/3/19 * Time: 10:37 * To change this template use File | Settings | File Templates. */ public class HelloSayServiceImpl implements HelloSayService { public User helloSay(User user) { user.setAge(123); user.setSex(false); return user ; } }
发表评论
-
java 之sftp实现
2018-03-31 17:41 660上周进行了linux环境下sftp的配置和用户权限的创建:ht ... -
java webService之CXF的使用
2018-03-29 14:25 448使用场景:华为VOD系统与媒资系统的接口,资产数据(元数据XM ... -
java 中jstat的用法
2018-03-20 18:06 719JDK自带VM分析工具jps,jstat,jmap,jcons ... -
javaEE性能优化
2018-03-20 16:41 504性能的优化一般可以从多方面入手,前端资源,java程序,数据传 ... -
jvm gc日志检查
2018-03-20 15:08 368JVM的GC日志的主要参数包括如下几个: -XX:+Pr ... -
负载均衡的几种原理
2018-03-19 16:05 474什么是负载均衡? 就 ... -
java 多线程
2018-03-16 13:29 357Java 多线程编程 Java 给 ... -
SpringMVC执行流程图
2018-03-15 10:46 471SpringMVC 流程图 DispatcherServle ... -
Java中BIO、NIO、AIO的原理及其区别
2018-03-12 17:34 661IO的处理方式通常分为 ... -
基于Spring 自定义标签实现
2017-11-30 09:26 558一、源码分析: Spring标签的定义分为默认标签和自定义 ... -
java二维码的生成和解析
2017-09-26 11:15 437一、本文目的: 为了研究对支付宝和微信支付的统一路口管理 ... -
spring-data-redis
2017-09-18 11:54 734Spring-data-redis使用 1、maven依赖 ... -
java,redis
2017-09-18 11:32 358Redis 简介 Redis 是完全开源免费的,遵守BSD协议 ... -
Java xml与实体Bean的转换
2017-09-05 15:24 7001、pom.xml依赖包: <dependenc ... -
Java JVM虚拟机知识要点
2017-08-30 10:25 5971、JVM虚拟机图解: ... -
java 上传小于占用空间为4k的jpg图片异常问题处理
2017-07-19 18:02 530javaWeb上传图片 jpg占用空间为4k时,Commons ... -
Springmvc 注入字符串与时间格式的转换
2017-03-24 11:10 1198以下列出两种spring支持的时间转换 -、方式一 1、 ... -
linux下修改war包
2017-03-06 15:32 1102Linux上修改war包上的文件 www.MyExceptio ... -
itellij idea 11.1.3 mybatis 自动构建代码
2016-11-16 09:50 445步骤一: 1、在工程中pom.xml加添 <buil ... -
intellij idea 下resin容器远程调试
2016-11-16 09:27 5386resin远程调试(我使用的是resin-4.0.41版本): ...
相关推荐
基于TCP协议的二进制RPC通信协议的Java实现源码+项目说明.zip 一种基于TCP协议的二进制高性能RPC通信协议实现。它以Protobuf作为基本的数据交换格式,支持完全基于POJO的发布方式,极大的简化了开发复杂性 - 完全...
总结,Protobuf RPC是一种高效的RPC通信方式,它利用protobuf进行数据序列化,基于TCP协议保证传输的可靠性。在Java中实现Protobuf RPC涉及服务接口定义、客户端和服务端的实现、TCP连接管理等多个方面,适合于对...
总的来说,基于TCP协议的WCF调用简单程序涵盖了服务开发的基本流程,从服务端的设计、实现到客户端的调用,都是学习和掌握WCF技术的关键步骤。这种通信方式在企业级应用中非常常见,尤其是在需要高性能、高可靠性的...
《大型分布式网站架构设计与实践》主要介绍了大型...第1章主要介绍企业内部SOA(Service Oriented Architecture,即面向服务的体系结构)架构的实现,包括HTTP协议的工作原理,基于TCP协议和基于HTTP协议的RPC实现,如
在这个基于Socket的RPC实现中,`socketServer`扮演服务端的角色,它监听客户端的请求并处理这些请求;而`socketClient`则是客户端,它负责发送请求到服务器,并接收返回的结果。 1. **SocketServer的实现**: - ...
- **网络通信模块**:实现了基于TCP或HTTP的网络通信接口,用于发送和接收RPC请求。 - **示例代码**:提供了使用该库的示例,帮助开发者理解和使用库中的功能。 - **配置和构建文件**:包含了编译和链接库所需的...
Protobuf RPC是一种基于TCP协议的二进制高性能RPC通信协议实现。它以Protobuf作为基本的数据交换格式,支持完全基于POJO的发布方式,极大的简化了开发复杂性。 Features: 完全支持POJO方式发布,使用非常简单 内置...
本项目是一个基于Netty框架实现的RPC(远程过程调用)服务。Netty是一个高性能、异步事件驱动的网络应用框架,适用于快速开发可维护的高性能协议服务器和客户端。本项目利用Netty的强大功能,实现了RPC服务的客户端...
#####基于TCP协议的远程过程调用框架——客户端,服务端基于TCP协议实现的一套RFC(远程过程调用)框架。 客户端和服务端均分为业务层,协议层(JSON),网络层(libevent),可以根据自己的业务定制每一层的接口; ...
本项目则是在Swoole的基础上,构建了一个基于JSON协议的远程过程调用(RPC)框架。通过此框架,开发者可以轻松地实现服务间的通信,提高系统的可扩展性和解耦性。 【描述】 这个简易的JSON-RPC框架是作者自己的实践...
xrpc基于TCP的RPC框架RPC框架包含几大部分一,通讯1,协议:TCP和HTTP2的优劣TCP包较小,有更好的传输速率,但易用性没有HTTP2好HTTP2虽然会稍微占一些流量,但由于其具有一些重叠,头部压缩等新特性,速度应该并不...
在本文中,我们将探讨基于Socket的RPC实现以及后续的改进计划,包括升级到Netty作为底层通信库,以及引入Zookeeper作为注册中心。 首先,让我们深入了解基于Socket的RPC工作原理。在客户端,我们定义了一个接口,...
SpringBoot以其简洁、快速的特性,成为了现代Java开发中的首选框架,它使得构建基于RPC的服务变得非常简单。本教程将深入探讨如何在SpringBoot中实现RPC服务。 首先,理解RPC的基本概念是必要的。RPC允许服务提供者...
根据rpc协议的思想,使用python的协程gevent实现的一个基于tcp,只能python使用的rpc协议, 不能夸语言, 不过不需要写额外的比如protobuf协议。 通过把类实例化后put到一个自定义对象中,实现方法的注册。 客户端...
Apache Mina是一个开源项目,它提供了一个高度可扩展且高性能的网络通信框架,支持多种协议,如TCP、UDP等。 首先,理解Mina的核心概念是必要的。Mina基于事件驱动和异步模型,允许开发者创建高效的网络应用。其...
例如,可以使用HTTP/1.1或HTTP/2,结合RESTful API设计原则,实现基于HTTP的RPC通信。Java的HttpURLConnection类和HttpClient库(如Apache HttpClient)可以方便地处理HTTP请求和响应。 综上所述,构建一个Java实现...
这里给出一个简单的RPC实现示例,使用Python的socket库: ```python # 服务器端 import socket def remote_service(data): return "Service result: " + data s = socket.socket(socket.AF_INET, socket.SOCK_...
TCP连接使用策略是基于TCP连接最近使用时间来判断的 关于Protocol 目前实现的协议有java自带的二进制协议和hessian协议 协议是可扩展的 关于传输协议 该框架使用自定义协议,头四个字节表示数总长度,第五个字节表示...
自定义协议是指根据特定需求设计的通信协议,它可能基于TCP、UDP或者其他传输层协议。在Netty中,你可以通过定义ByteToMessageDecoder和MessageToByteEncoder等编解码器来处理自定义协议的数据帧。这些编解码器允许...