<< 返回
PowerRPC


POWERRPC是一个开发高性能网络软件的工具,它能让网络软件的开发变得快速而高效,大大降低开发成本。
它是当今世界上最先进的RPC开发工具,使用简单易学、功能强大,使您能在数十分钟内开发出运行于各种平台的分布计算软件。POWERRPC支持各种UNIX,LINUX和WIN32。它的用户包括财富500中的多家跨国公司,如NOKIA,AOL,HP,SONY,波音,INTEL,花旗银行等
。
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)
编程指南
一步一步学用PowerRPC

下面,我们将演示怎样用POWERRPC写一个服务器程序。我们用一个常用例子,那就是写一个通过互联网(TCP/IP)获取股票报价的SEVER/CLIENT。当然,任何人都可以用直接用SOCKET来传送数据,手工完成这个练习,但是这样写出的代码是没有普适性和多少重复利用价值的,而且还会有很多问题考虑不到。POWERRPC的目的,就是要提供一个框架自动产生网络通讯部分的源代码,使程序源集中精力在商业逻辑上,而不是网络数据传输上--即使是非常复杂的数据结构,如数组,指针,LINKED
LIST,树等。
用POWERRPC来写这个程序,你只要写十几行C代码就漂亮的解决问题了。首先,你在一个界面定义文件里声明一个界面函数getQuote(),然后用POWERRPC编译器从这个界面产生一系列C源代码。POWERRPC在客户端生成一个同名函数getQuote(),这个函数把其参数传给服务器程序,并等待结果。服务器收到参数后,调用真正的getQuote(),然后把结果送会客户端。对于客户端程序来说,这个远程调用看起来就象调用一个本地函数一样,没有区别。
好,让我们开始写我们的第一个POWERRPC软件吧!
步骤:
第一步:
写一个界面定义文件。这个文件的语法基本上就是C的声明语法,可以定义各种C数据结构。
%cat quote.idl
typedef struct
{
char Ticker[8];
double Low, High, Close;
}stkQuote;
interface quote
{
int getQuote( inout stkQuote* pQuote);
} 0x12345;
|
第二步:
写服务器的实现代码文件 quote_impl.c
%cat quote_impl.c
#include "quote.h"
/* the header file to
be generated by powerRPC*/
int getQuote(stkQuote* pQuote)
{
/* let's just return some good
numbers */
printf("Client asked quote for
%s\n",
pQuote->Ticker);
pQuote->Low = 45.2;
pQuote->High = 55.5;
pQuote->Close = 54.1;
return 0;
}
|
第三步:
用POWERRPC编译quote.idl
%powerRPC quote.idl
运行结果是POWERRPC会生成五个文件,以下是它们的用途
文件名
|
目 的
|
用于
|
quote.h |
共用的头文件 |
服务器实现文件和客户端程序都需包括此文件
|
quote_xdr.c |
编码与解码参数以实现数据在不同硬件不同操作系统能够交换 |
客户断和服务端 |
quote_svc.c |
服务端函数调度。收到客户端调用后,解码参数,并调用对应函数 |
服务端 |
quote_cln.c |
客户端占位函数。它定义getQuote()的客户端“代理”,在其里面,参数通过XDR传到服务端,然后客户端被锁住,等待服务端回应 |
客户端
|
quote.mak |
编译客户端和服务端程序的MAKEFILE |
我们幸运的程序员 |
第四步:
写一个调用getQuote()的客户程序
%cat quote_call.c
#include "quote.h"
int main(int argc, char** argv) {
stkQuote quote;
if(argc<3) {
printf("Usage: %s serverhost tikcer\n",
argv[0]);
exit(0);
}
if(quote_bind(argv[1],0,0,0) == NULL) {
printf("Fail connecting to server on %s\n",
argv[1]);
exit(1);
}
strcpy(quote.Ticker, argv[2]);
if(getQuote("e)) {
printf("Fail getting quote for %s\n",
quote.Ticker);
} else {
printf("Low = %f, High =%f, Close = %f",
quote.Low, quote.High, quote.Close);
}
quote_unbind(0);
return 0;
}
|
第五步:
编译、运行
% make -f quote.mak
以上命令将生成客户端和服务端的可执行文件。现在我们可以试验了
先运行服务器
% quoteserv&
然后运行客户程序。我们可以把客户程序拷贝到联网的另一台机器试验
% quoteclnt [服务端所在机器名] YHOO
总结:
现在,你看到用POWERRPC写SERVER/CLIENT有多容易了吧!也许有些地方还不明白,如quote_bind(),
quote_unbind(), 但也许你已经可以猜出一点来。但这只是一个最简单的例子。在用户手册里我们有更有趣的例子,比如一百行源代码就写出一个文件服务器。再花个把小时的时间,你就可以基本掌握POWERRPC这个强大的武器了。有了这样的杀手锏,写分布计算的软件手到擒来。
|