RPC的理解

来源:互联网 发布:js获取一个input的值 编辑:程序博客网 时间:2024/05/17 15:59

转载:http://www.cnblogs.com/cyfonly/p/6059374.html
1、所谓的RPC
在了解 Thrift 之前,先来简单科普一下什么是 RPC(远程过程调用)。
先看下面这个栗子:

public void invoke(){    String param1 = "my String 1";    String param2 = "my String 2";    String res = getStr(param1, param2);    System.out.println("res=" + res)}private String getStr(String str1, String str2){    return str1 + str2;}

这是一个最简单不过的本地函数调用代码,调用方和被调用方都在一个程序内部,属于进程内调用。
CPU 在执行调用时切换去执行被调用函数,执行完后再切换回来执行后续的代码。对调用方而言,执行被调用函数时会阻塞(非异步情况下)直到调用函数执行完毕。过程如图
这里写图片描述
接下来看个 RPC 调用的栗子:

public void test(){    TestQry.Client client = getClient("192.168.4.222", 7800, 5000);    String param1 = "my String 1";    String param2 = "my String 2";    String res = client.getStr(param1, param2);    System.out.println("res=" + res);}private TestQry.Client getClient(String ip, int port, int timeOut) throws Exception{    TSocket tSocket = new TSocket();    TTransport transport = new TFramedTransport(tSocket);    tTransport.open();    TProtocol protocol = new TBinaryProtocol(tTransport);    return new TestQry.Client(protocol);}

这是一个进程间调用,调用方和被调用方不在同一个进程(甚至不同的服务器或机房)。
进程间调用需要通过网络来传输数据,调用方在执行 RPC 调用时会阻塞(非异步情况下)直到调用结果返回才继续执行后续代码。过程如图。
这里写图片描述
一言以蔽之,RPC 是一种通过网络从远程计算机程序上请求服务的方式,它使得开发包括网络分布式多程序在内的应用程序更加容易。

原创粉丝点击