hadoop18---socket实现rpc
客户端:
package cn.itcast_04_reflect.socket; import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket; public class TestClient {
public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 9898);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream(); PrintWriter pw = new PrintWriter(new BufferedOutputStream(out));
pw.println("cn.itcast_04_reflect.rpc.TestBusiness:getPrice:yifu");
pw.flush(); BufferedReader br = new BufferedReader(new InputStreamReader(in));
String readLine = br.readLine(); System.out.println("client get result: " + readLine); socket.close();
}
}
package cn.itcast_04_reflect.socket; import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket; public class TestServerTask implements Runnable{
private Socket socket;
public TestServerTask(Socket socket){
this.socket = socket;
} @Override
public void run() {
InputStream in;
OutputStream out;
try {
in = socket.getInputStream();
out = socket.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in));//一次读一行,客户端的消息要带回车符。
String request=null;
while((request = br.readLine())!=null) {
request = br.readLine();
}
String[] split = request.split(":");
String className = split[0];
String methodName = split[1];
String methodParam= split[2]; Class<?> forName = Class.forName(className);
System.out.println("calling class: " + forName);
Object newInstance = forName.newInstance();
Method method = forName.getMethod(methodName,String.class);
System.out.println("calling method: " + method);
Object invoke = method.invoke(newInstance, methodParam);
System.out.println("results: " + (int)invoke); PrintWriter pw = new PrintWriter(new BufferedOutputStream(out));
pw.println((int)invoke);
pw.flush(); br.close();
pw.close();
socket.close(); } catch (Exception e) { e.printStackTrace();
} } public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("localhost",9898));
while(true){
Socket socket = server.accept();
new Thread(new TestServerTask(socket)).start();
}
}
} public interface IBusiness {
public int getPrice(String good);
} public class TestBusiness implements IBusiness{
@Override
public int getPrice(String good){
return good.equals("yifu")?10:20;
}
}
hadoop18---socket实现rpc的更多相关文章
- Hadoop源码学习笔记(4) ——Socket到RPC调用
Hadoop源码学习笔记(4) ——Socket到RPC调用 Hadoop是一个分布式程序,分布在多台机器上运行,事必会涉及到网络编程.那这里如何让网络编程变得简单.透明的呢? 网络编程中,首先我们要 ...
- Socket、RPC通信实例,简单版本,仅供查阅
TCP/IP Socket 如果使用TCP协议来传递数据,客户端和服务器端需要分别经过以下步骤: server: 创建socket对象 - bind(绑定socket到指定地址和端口) - liste ...
- webservice websocket socket http rpc
HTTP: HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接. webSocket: 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向 ...
- rpc、socket、mq
关于RPC与MQ异同的理解 相同:1.都利于大型系统的解耦:2.都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言):不同:1.RPC侧重功能调用,因此多半是同步的:备注:也 ...
- RPC和Socket
RPC和Socket的区别 rpc是通过什么实现啊?socket! RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的 ...
- java接口调用——webservice就是一个RPC而已
很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...
- 初识RPC协议
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...
- RPC简介及原理
简介 RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用). 越底层, ...
- 浅析RPC概念框架
本文原封不动的来至于csdn MindWind,原文请见 RPC:RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一 ...
- RPC原理及其调用过程
远程过程调用,简称为RPC,是一个计算机通信协议,它允许运行于一台计算机的程序调用另一台计算机的子程序,而无需额外地为这个交互作用编程. RPC与传统的HTTP对比 优点: 1. 传输效率高(二进制传 ...
随机推荐
- 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest D Dividing Marbles
题目大意: 给出一个$N(N <= 2^{22}$),$N$的二进制表示中1的个数不超过4. 一开始有一个集合$S = {N}$, 每次操作可以选择$n\in S \ (n > 1)$, ...
- jquery js 动态加载 js文件
jquery方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- java web 页面提速
记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...
- poj 3498(最大流+拆点)
题目链接:http://poj.org/problem?id=3498 思路:首先设一个超级源点,将源点与各地相连,边容量为各点目前的企鹅数量,然后就是对每个冰块i进行拆点了(i,i+n),边容量为能 ...
- linux机器之间配置ssh无密访问
首先确认已安装了ssh服务,没装的自行百度一下. A机器:192.168.1.1 B机器:192.168.1.2 使A无密访问B,步骤如下[root@localhost ~]# cd .ssh 如果没 ...
- Java接口成员变量和方法默认修饰符
Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final S ...
- python的猴子补丁monkey patch
monkey patch指的是在运行时动态替换,一般是在startup的时候. 用过gevent就会知道,会在最开头的地方gevent.monkey.patch_all();把标准库中的thread/ ...
- springmvc的一个错误
初学ssm,碰到一个错误,非注解的就没错,注解的就错了 找了半天,终于发现错误,真的很傻比啊,导入的springframework版本不一致... 都导入4.3.18版本的即可...
- Cocos2d-x学习笔记:CCSprite的使用总结
一.精灵创建及初始化 备注:默认锚点ccp(0.5,0.5),默认位置 ccp(0,0),contentSize为精灵图片尺寸 1.从图片文件创建 2.从帧缓存创建: 3.初始化及自定义大小 4. 从 ...
- 大话Python程序的命名规范
1.全局变量名: 全部大写 MY_GLOBAL_VAR 2. 类名: 首字母大写,总是使用首字母大写单词串,如MyClass,内部类可以使用额外的前导下划线: 3.普通变量,普通函数名,文件名: 全部 ...