RPC机制
程序员文章站
2022-06-01 21:32:28
...
@Author : Spinach | GHB
@Link : http://blog.csdn.net/bocai8058
1.概述
RPC(Remote Procedure Call)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。
PRC协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型中,RPC跨越了传输层和应用层,RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。
- RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
- 首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。
- 在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待写一个调用信息,
- 最后客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
2.框架
RPC通常采用客户端服务器模型,其框架主要有以下几部分
- 通信模块:实现请求应该协议。主要分为同步方式和异步方式。
- stub程序:客户端和服务器均包含stub程序,可以看做代理程序。使得远程函数表现的跟本地调用一样,对用户程序完全透明。
- 调度程序:接受来自通信模块的请求消息,根据标识选择stub程序处理。并发量大一般采用线程池处理。
- 客户程序/服务过程:请求发出者和请求的处理者。
3.代码实现
//Message.java
package China.hadoop.RPC;
public interface Message
{
public static final int versionID = 10010;
public String sayHi(String name);
}
//RPCClient.java
package China.hadoop.RPC;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
public class RPCClient
{
public static void main(String[] args) throws IOException
{
Message proxy = RPC.getProxy(Message.class, 10010,
new InetSocketAddress("172.16.247.175", 9527),
new Configuration());
String result = proxy.sayHi("test");
System.out.println(result);
RPC.stopProxy(proxy);
}
}
//RPCServer.java
package China.hadoop.RPC;
import java.io.IOException;
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Builder;
import org.apache.hadoop.ipc.Server;
public class RPCServer implements Message
{
@Override
public String sayHi(String name)
{
return "Hi" + name;
}
public static void main(String[] args)
throws HadoopIllegalArgumentException, IOException
{
Configuration conf = new Configuration();
Server server = new RPC.Builder(conf).setProtocol(Message.class)
.setInstance(new RPCServer()).setBindAddress("172.16.247.175")
.setPort(9527).build();
server.start();
}
}
上一篇: P1378 油滴扩展