RMI的实现
1.编写一个远程接口
/** * 远程接口 */ public interface TestInterfactRemote extends Remote{ public String add(String a,String b) throws RemoteException; public String add() throws RemoteException; }
2.编写接口的实现类
public class TestInterfaceRemoteImpl extends UnicastRemoteObject implements TestInterfactRemote { public TestInterfaceRemoteImpl() throws RemoteException { super(); } public String add(String a, String b) throws RemoteException { return a + b; } public String add() throws RemoteException { return "Hello Word"; } }
3.编写服务端程序
/** * 服务器端 */ public class Server{ public Server() { try { TestInterfactRemote testInterfactRemote = new TestInterfaceRemoteImpl(); LocateRegistry.createRegistry(8800); Naming.rebind("rmi://127.0.0.1:8800/server", testInterfactRemote); System.out.println("Service Start!"); } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { new Server(); } }
4.编写客户端程序
/** * 客户端程序 */ public class Client { public static void main(String args[]) { try { TestInterfactRemote testInterfactRemote = (TestInterfactRemote) Naming .lookup("rmi://127.0.0.1:8800/server"); System.out.println(testInterfactRemote.add("rmi a ", "rmib")); } catch (Exception e) { e.printStackTrace(); } } }
IPC的实现过程与RMI很类似
1、编写远程接口
public class IPCFileStatus implements Writable { private String filename; private long time; public IPCFileStatus() { } public IPCFileStatus(String filename) { this.filename=filename; this.time=(new Date()).getTime(); } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public String toString() { return "File: "+filename+" Create at "+(new Date(time)); } @Override public void readFields(DataInput in) throws IOException { this.filename = Text.readString(in); this.time = in.readLong(); } @Override public void write(DataOutput out) throws IOException { Text.writeString(out, filename); out.writeLong(time); } }
import org.apache.hadoop.ipc.VersionedProtocol; public interface IPCQueryStatus extends VersionedProtocol{ public static final long versionID = 1L; public IPCFileStatus getFileStatus(String fileName); }
2、编写接口的实现类
public class IPCQueryStatusImpl implements IPCQueryStatus { public IPCQueryStatusImpl() {} @Override public IPCFileStatus getFileStatus(String filename) { IPCFileStatus status=new IPCFileStatus(filename); System.out.println("Method getFileStatus Called, return: "+status); return status; } /** * 用于服务器与客户端,进行IPC接口版本检查,再服务器返回给客户端时调用,如果服务器端的IPC版本与客户端不一致 * 那么就会抛出版本不一致的异常 */ @Override public long getProtocolVersion(String protocol, long clientVersion) throws IOException { System.out.println("protocol: "+protocol); System.out.println("clientVersion: "+clientVersion); return IPCQueryStatus.versionID; } @Override public ProtocolSignature getProtocolSignature(String arg0, long arg1, int arg2) throws IOException { return new ProtocolSignature(IPCQueryStatus.versionID, null); } }
3、编写服务端程序
public class IPCQueryServer { public static final int IPC_PORT = 32121; public static final long IPC_VER = 5473L; public static void main(String[] args) { try { Configuration conf = new Configuration(); // IPCQueryStatusImpl queryService=new IPCQueryStatusImpl(); System.out.println(conf); Server server = new RPC.Builder(conf).setProtocol(IPCQueryStatus.class) .setInstance(new IPCQueryStatusImpl()).setBindAddress("127.0.0.1").setPort(7777) .setNumHandlers(5).setVerbose(true).build(); server.start(); System.out.println("Server ready, press any key to stop"); System.in.read(); server.stop(); System.out.println("Server stopped"); } catch (Exception e) { e.printStackTrace(); } } }
4、编写客户端程序
public class IPCQueryClient { public static void main(String[] args) { try { System.out.println("Interface name: "+IPCQueryStatus.class.getName()); System.out.println("Interface name: "+IPCQueryStatus.class.getMethod("getFileStatus", String.class).getName()); InetSocketAddress addr=new InetSocketAddress("localhost", 7777); IPCQueryStatus query = null; // RPC.getProxy(IPCQueryStatus.class, clientVersion, addr, conf) query = RPC.getProxy(IPCQueryStatus.class, IPCQueryServer.IPC_VER, addr,new Configuration()); IPCFileStatus status=query.getFileStatus("/tmp/testIPC"); System.out.println(status); RPC.stopProxy(query); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
但是,通过一些间接手段,如套接字(Sockets)、远程方法调用(RMI,Remote Method Invocation)和Java的命名与目录接口(JNDI,Java Naming and Directory Interface)等,我们可以实现Java进程间的通信。...
Java实现简单的RPC框架 Java如何实现简单的RPC框架是一个非常重要的话题, RPC全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现...
AIDL(Android Interface Definition Language)是Android提供的一种强大的工具,它使得开发者能够轻松地实现进程间的接口调用,类似于Java中的RMI(Remote Method Invocation)。本资料主要探讨了如何使用AIDL在...
在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种重要的技术,使得不同进程之间可以共享数据或服务。AIDL(Android Interface Definition Language)是Android为实现进程间通信提供的一...
在IT行业中,尤其是在Java开发领域,系统间通信(IPC,Inter-Process Communication)和分布式调用是构建大型、可扩展的系统的关键技术。本篇主要探讨的是如何在Java环境中实现跨进程的通信以及进行分布式服务的调用...
Java编程_Java_"可能是因为标题被截断了,根据描述,我们可以推断这可能是一个关于“Java编程”和“Java”的主题,特别是涉及到“操作系统IPC(Inter-Process Communication,进程间通信)机制”的设计与实现。...
分布式计算和并行计算是两种不同的计算方式。...并发服务器可以同时处理多个请求,常通过线程或异步IPC实现,而迭代服务器每次只处理一个请求,直到该请求完成才接受新的请求,通常不适用于高并发的场景。
下面通过一个简单的示例来说明 IPC 的使用方法: ```java public void testCalls() throws Exception { // 创建 server Server server = RPC.getServer(new TestImpl(), ADDRESS, 0, conf); TestProtocol proxy ...
在IT行业中,"PB程序AB调用"通常指的是在编程中一个程序(A)如何与另一个程序(B)进行交互,以实现特定的功能或数据共享。这种交互方式是跨进程通信(Inter-Process Communication, IPC)的一种具体实现,特别是在...
在处理Android应用时,开发者可能需要实现进程间的通信(IPC),这时就涉及到了AIDL(Android Interface Definition Language)。 AIDL是Android系统提供的一个工具,用于定义服务与不同进程之间交互的接口。它类似...
- **Zookeeper RMI高可用分布式集群开发**:指导如何使用Zookeeper实现RMI服务的高可用性。 - **Zookeeper Redis高可用监控实现**:说明如何利用Zookeeper实现Redis集群的高可用监控。 #### 九、Netty异步IO通信...
### 分布式实验:基于Java的远程调用与.NET Remoting技术详解 #### 一、分布式实验概述 在现代软件开发领域,随着互联网技术的发展和业务需求的不断扩展,分布式系统已经成为解决高并发、高性能问题的重要手段之一...
本资源包含的是Java实现的进程通信源码,这对于理解和学习Java并发编程、进程间通信(IPC,Inter-Process Communication)具有很高的价值。 Java中的进程通信主要可以通过以下几种方式实现: 1. **管道(Pipes)**...
3. **进程间通信(IPC)**:在Java的RMI(Remote Method Invocation)中,序列化用于在不同Java虚拟机之间传递对象。 在Java中,我们可以使用`java.io.ObjectOutputStream`来实现对象的序列化,`java.io....