<< 返回
JavaRPC

这是一个开发高性能网络软件的工具。它可以使网络软件的开发变得快速而高效,大大降低开发成本。
RPC广泛应用于UNIX和WINDOWS操作系统,其核心技术在一般网络编程、操作系统和分布计算的教科书与参考书中都会涉及到。较权威的有
:
1) UNIX Network Programming, Volume 2: Interprocess Communications
(作者:W. Richard Stevens)
2) TCP/IP网络互联技术 II (清华大学出版社 )
3) Power Programming With RPC (作者:John Bloomer)
JavaRPC
编程指南
在这个指南中,我们举例说明怎样为一简单 Msg RPC 服务器建立一个 Java
RPC客户。这个指南并不是介绍 ONC RPC 编程,而是关于怎样使用 JavaRPC 工具。如果你不熟悉ONC RPC,
那么 O'Reilly的书 "Power Programming RPC" 是一个很好的老师。
由下列的RPC IDL定义 Msg RPC
%catmsg.x
version MSGSERV_V1 {
string sendmsg(string)=2;
} = 1;
} = 1234567;
|
一个简单的子程序 sendmsg 定义了一个RPC 程序的界面,客户把一个字符串传送给服务器,服务器返回同样的字符串。
C版本的 Msg 客户/服务器可从 东方之晓
ONC RPC Win32 For SDK 得到。
现在让我们用Java语言中建立 Msg RPC 客户。
第1步 用jrpcgen编译Msg.x
第2步 主要客户的编程
第3步 编译客户
第4步 运行Msg Java客户
第5步 编写Msg服务器程序
第6步 编译和运行java服务器
第1步.用 jrpcgen 编译 Msg.x
在命令提示界面中运行
%jrpcgen msg.x
演示包含在 win32,solaris 和 linux 上运行的 jrpcgen
二进制文件,它们产生完全相同的Java语言代码。
下列文件将会生成:
- msgserv.java为RPC界面定义
- msgserv_cln.java客户界面
- msgserv_svcb.java服务器界面
在一般情况下jrpcgen将生成四类Java语言源代码文件
- 为用户定义类型的 XDR 类别
- RPC程序界面
- 客户界面类别
- 服务器界面类别
在我们情况中,因为字符串是一内置类型,而没有XDR类别。
第2步.主要客户的编程
%cat ClientTest.java
import netbula.ORPC.*;
import java.net.*;
public class ClientTest {
public ClientTest () {}
static public void main(String args[]) {
try {
msgserv_cln cl = new msgserv_cln(args[0], "udp");
cl.setAuth(new AuthUnix
("localhost", 501, 100, new int[2]));
String msg = "hello world\n";
System.out.println("sending.. ");
for(int i=0; i<5; i++){
String reply = cl.sendmsg(msg);
System.out.println(
"got " + reply +"\n");
}
}catch (rpc_err e) {
System.out.println("rpc: " + e.toString());
}
}
}
|
这里,我们建造一个Msg 客户用UDP协议连接到在localhost上的Msg 服务器。然后传送一信息,打印回复。
第3步.编译客户
确保netbula.ORPC包裹是在classpath中(简单给CLASSPATH环境变数添加orpc.jar文件)。
通过Java语言编译器运行源文件:
%javac ClientTest.javaMSGSERV_1.java
这个将生产两个类别文件:ClientTest.class和MSGSERV_1.class。
第4步.运行Msg Java客户
- 确保Msg服务器(C版本或者Java语言版本)是运行在localhost
- 运行客户
%java ClientTest
如果服务器运行,你应该看见客户端打印出从服务器的回答,否则,它将打印出一RPC错误:程序没有登记。
就是这样!
现在,让我们用Java语言建立Msg 服务器
第5步 编写Msg 服务器程序
jrpcgen产生msgserv_svcb.java,定义了一个包括绝对子程序 sendmsg
的绝对类别msgserv_svcb。为完全编写服务器,你需要为sendmsg提供一个程序体。
import netbula.ORPC.*;
class msgsvc extends msgserv_svcb {
//implement the server function,
let's just echo the msg back
String sendmsg(String msg) {
System.out.println("got msg from client "+ msg);
return msg;
}//main function runs the server
public static void main(String srgv[]) {
//let's run the server
new msgsvc().run();
}
}
|
第6步 编译和运行java服务器
%javac msgsvc.java
%java msgsvc
*用C编写Msg 服务器/客户
1、使用rpcgen把msg.x文件编译成客户服务器残余。unix具有rpcgen,rpcgen
for win32可以从东方之晓得到。
2、编写服务器
请参看JavaRPC包裹中,cservs 路径下的例子。
|