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. 传输效率高(二进制传 ...
随机推荐
- RPM ,DPKG ,YUM ,APT-GET
http://blog.csdn.net/li740207611/article/details/50801462
- 59、常规控件(2)TextInputLayout-让EditText提示更加人性化
提示语用在显示. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro ...
- SQL语句的添加、删除、修改多种方法 —— 基本操作
添加.删除.修改使用db.Execute(Sql)命令执行操作 ╔----------------╗ ☆ 数据记录筛选 ☆ ╚----------------╝ 注意:单双引号的用法可能有误(没有测试 ...
- 解决"django-registration(1048,“column”last_login“不能为null”)
去数据库(MySQL终端): 1.查看django_migrations表的信息.如果你看到一些记录,删除它们(如果migrations目录下有原来的配置,需要清除). mysql> SELEC ...
- Logon Session Times
How to Get User Logon Session Times from the Event Log To figure out user session time, you’ll first ...
- Sublime text找不到.so文件
在使用Sublime text打开一个android项目的时候,你会发现找不到.so文件. 解决方法: 点击Sublime text的Preferences,然后点击Settings,这时候出现设置的 ...
- iOS中nil 、NULL、 Nil 、NSNull
nil,定义一个空的实例,指向OC中对象的空指针. 示例代码: NSString *someString = nil; NSURL *someURL = nil; id someObject = ni ...
- json.dumps 和 json.dump的区别,load和loads的区别
json.dumps 和 json.dump的区别,load和loads的区别
- Java加密技术(四)非对称加密算法RSA
RSA 这样的算法1978年就出现了.它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作.也非常流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir ...
- Deep Learning -- 数据增强
数据增强 在图像的深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强,数据增强,常用的方式,就是旋转图像,剪切图像,改变图像色差,扭曲图像特 ...