第 三 讲 软件互操作

50
软软软软软 1/50 软软软软软软软软软软 软 软 软 软 软 软 软软软软软 软软软软软

Upload: abdalla

Post on 18-Mar-2016

139 views

Category:

Documents


0 download

DESCRIPTION

第 三 讲 软件互操作. 在一定程度上 人类的思维产生于 简单个体之间的相互作用. ——Marvin Minsky. 内 容. 一、互操作的基础 二、远程过程调用( RPC ) 三、基于 RPC 的程序开发 四、互操作体系. 一、互操作的基础. 1 、互操作是什么 2 、 TCP/IP 3 、基于 Socket 的网络软件. 1、互操作是什么?. Interoperability Peter Wegner [96]: Interoperability is the ability of two or more - PowerPoint PPT Presentation

TRANSCRIPT

软件互操作 1/50软件构件与中间件技术

第 三 讲第 三 讲软件互操作软件互操作

软件互操作 2/50软件构件与中间件技术

在一定程度上人类的思维产生于

简单个体之间的相互作用——Marvin Minsky

软件互操作 3/50软件构件与中间件技术

内 容一、互操作的基础二、远程过程调用( RPC )三、基于 RPC 的程序开发四、互操作体系

软件互操作 4/50软件构件与中间件技术

一、互操作的基础1 、互操作是什么2 、 TCP/IP3 、基于 Socket 的网络软件

软件互操作 5/50软件构件与中间件技术1、互操作是什么?Interoperability Peter Wegner [96]: Interoperability is the ability of two or moresoftware components to cooperate despite differences in language,interface, and execution platform. Heiler [95]: Interoperability among components of large-scale,distributed system is the ability to exchange services and datawith one another.

软件互操作是 应用层的某一实体使用另一实体的能力

软件互操作 6/50软件构件与中间件技术

网络应用发展三步曲:

消息传递互操作

协同工作

软件互操作 7/50软件构件与中间件技术

消息传递是指具有一定结构的信息从一个结点传输到另外一个结点的过程。 消息传递突破了单机环境中通过共享内存 ( 变量 ) 进行信息交换的模式。通过消息的发送、消息的接收等环节,消息传递实现了不同运行实体间的信息交流。 消息传递使计算机从封闭、独立的模式向开放、交流的模式转变,这一转变极大地丰富了计算机学科的研究内容与应用范围。 消息传递的目的性不强,只要正确地将信息从一结点传给另一结点即认为成功,因此对语法的要求较高。 例如: TCP/IP

• 消息传递

软件互操作 8/50软件构件与中间件技术

互操作是一个结点上的成员对另一个结点上资源的使用。互操作过程中,发送方将操作的方法与参数打包,作为一条消息进行发送,接收方则对消息头进行解释,并根据所载信息的含义、参数执行相应的操作。 互操作的目标在于实现操作发出方的功能调用,并提供一定的透明性支持 (Transparent utility) ,实现不同操作空间之间的无缝连接 (seamless connection) ,强调消息的语义,即消息所包含的意义。 例如: RPC 、 ORB 、 RMI

• 互操作

软件互操作 9/50软件构件与中间件技术

协同工作是协作范围的进一步扩展,也是消息传递、互操作的目标与结果。协同工作的主体既可以是人,也可以是其他的计算机资源。 协同工作的目标在于完成由许多人共同承担的大型任务。消息被传递后,不仅要求语法、语义正确,还要求接收方根据消息的含义进行反应,使消息体现出一定的效用,而不是被简单的传送。 例如: CSCW ( Computer Supported Cooperative Wor

k )

• 协同工作

软件互操作 10/50软件构件与中间件技术协作三步曲与通信层次的对应:

消息传递

通信三层次:语法语义语用

互操作协同工作

语法语义语用

协作三步曲:消息传递互操作协同工作

软件互操作 11/50软件构件与中间件技术

ApplicationPresentation

TransportNetworkData linkPhysical

SessionTCP, UDP

2、 TCP/IP( 1 ) ISO/OSI 参考模型 与 TCP/IP 的对照

ISO/OSI 参考模型

主机与网络的连接:ethernet 、 token-ring

因特网层: IP

应用层:telnet 、 ftp 、 smtp 、 snmp 、dns 、 http 、 nntp

TCP/IP

软件互操作 12/50软件构件与中间件技术

0 Network Host

1 0 Network Host

1 1 0 Network Host

1 1 1 0 Multicast address

1 1 1 1 0 Reversed for future use

A

B

C

D

E

1.0.0.0 ~127.255.255.255

地址范围

128.0.0.0 ~191.255.255.255

192.0.0.0 ~223.255.255.255

224.0.0.0 ~239.255.255.255

240.0.0.0 ~247.255.255.255

类( 2 ) IP : Internet Protocol

软件互操作 13/50软件构件与中间件技术

Vers. H.len Service type Total length

Identification Flags Fragment offset

data

Time to live Protocol Header checksum

Source IP address

Destination IP address

IP options (may be omitted) Padding

IP 头

Service type

Precedence D T R unused

20 bytes

软件互操作 14/50软件构件与中间件技术( 3 ) TCP :Transmission Control Protocol

TCP 为两个分布式的构件提供了双向的消息通信 UNIX 中的命令 rsh, rcp 及 rlogin 全部基于

TCP

它是一个可靠但较慢的协议 在客户服务器双方进行缓冲

以提高速度

软件互操作 15/50软件构件与中间件技术 TCP 头格式

Source port Destination port

Sequence number

Acknowledgement number

Checksum Urgent pointer

Options (0 or more words)

Data (optional)

H.len Code bitsReserved Window size

软件互操作 16/50软件构件与中间件技术UDP : User Datagram Protocol

一个构件向另一个构件发送消息 另一个构件的标识包含在消息中 不可靠但快速的协议 消息长度固定 消息在接受方排队 UNIX rwho 命令基于 UDP

软件互操作 17/50软件构件与中间件技术3 、基于 Socket 的网络软件

面向非连接:服务器 客户Socket()

bind()

readfrom()

sendto()

close()

Socket()

bind()

sendto()

readfrom()

close()

处理请求…应答数据

请求服务阻塞,等待客户数据

软件互操作 18/50软件构件与中间件技术面向连接: 服务器 客户

Socket()

bind()

listen()

read()

close()

Socket()

connect()

write()

close()

处理请求…write() read()

accept()阻塞,等待客户连接

建立连接请求服务

应答数据

软件互操作 19/50软件构件与中间件技术

1 、动因与实例2 、工作原理3 、编排 / 还原4 、请求分派

二、 RPC

软件互操作 20/50软件构件与中间件技术1、动因与实例

开发基于 SOCKET 的网络软件非常复杂FTPTELNET位于不同机器上的软件互操作困难连接管理异构导致 RPC ( Remote Procedure Calling )的产生

主要实例:SUN公司等提出的 ONC ( Open Network Computing ) RPC主要由 SUN予以实现OSF ( Open Software Foundation ) RPC影响最大主要由 DCE(Distributed Computing Environment) 实现

DCE 是 OSF 提出的分布计算体系结构

软件互操作 21/50软件构件与中间件技术2、 工作原理

Deposit( 1000) 继续运行

启动服务器上的存款过程 int Deposit(number){ return total + number; }

客户端程序 服务器端程序

以对某银行帐户的一个存款过程为例:

软件互操作 22/50软件构件与中间件技术

Network

ClientStub

RPCInterface

RPCInterface

ServerStub

send receive send receive

( ( 11 )调用过程)调用过程客户端程序 服务器端程序

ClientProgram

ServerProgram

软件互操作 23/50软件构件与中间件技术

1、客户按本地调用的方式 直接调用本地的客户指代

客户指代具有与服务器相同的过程接口2、客户指代 将客户的调用请求进行加工、打包

向底层通信机制(如套接字)发出请求消息客户指代 不进行任何逻辑处理

只是一个中介3、客户端通过底层的通信机制

将消息传送给服务器端的底层通信机制

过程描述:

软件互操作 24/50软件构件与中间件技术4、服务器 需要部分地解析消息

找出客户希望调用的服务器程序5、服务器指代对消息进行解析

从中获得调用者的参数然后调用服务器程序

6、服务器程序执行相应的过程7、服务器程序将结果返回给服务器指代8、服务器指代将结果打包

向底层通信机制发出应答消息9、服务器端通信机制将消息传送给客户端通信机制

软件互操作 25/50软件构件与中间件技术10、客户端节点上也可能有多个调出点

通信机制需要部分地解析返回的消息找出消息应该返回给哪个客户程序并将消息发送给对应的客户指代

11、客户指代从消息中解析结果返回给客户程序

软件互操作 26/50软件构件与中间件技术(( 22 )编排)编排 // 还还原原指代( Stub )的主要工作包括:( 1 )建立客户与服务器之间的连接( 2 )将客户的高层调用语句打包为一条底层的请求消息 这一过程在 RPC 中被称为编排( marshal )( 3 )等待服务器返回应答消息( 4 )将来自服务器底层的应答消息解析为可以返回的数据 这一过程在 RPC 中被称为还原( unmarshal )( 5 )将返回值传送给客户程序 需要特别处理:编码、字节序 等问题

软件互操作 27/50软件构件与中间件技术( 3) 请求分派

服务器端的指代: 除了需要进行编排、还原外

还需要 区分客户所请求的过程名然后将客户的请求分派( dispatch )给正确的过程

“指代” 目前主要被用于专门代表客户端的代理程序而服务器端则由新的机制予以支持在 CORBA 中专门分离出了对象适配器( OA : Object Adaptor )

在 EJB 中发展出了构件容器用于在运行过程中专门管理构件的各种状态此时的服务器端不仅负责请求分派还负责向底层机制的注册(以方便请求的定位)以及过程的激活(以加强系统的灵活性) 等等功能

软件互操作 28/50软件构件与中间件技术

三、基于 RPC的开发过程1 、定义并编译接口 2 、编写实现具体服务功能的代码3 、编译、连接,产生可执行的服务器程序4 、编写客户端代码5 、编译、连接,产生客户程序6 、运行服务器端程序7 、运行客户端程序

软件互操作 29/50软件构件与中间件技术客户端开发过程 服务器端开发过程

服务器端程序

IDL 编译器(rpcgen)

客户端程序

IDLIDL

account.haccount_clnt.c account _svc.c server.cclient.c

rpclib.o

软件互操作 30/50软件构件与中间件技术1 、定义并编译接口 仍然结合银行帐号的例子 接口定义文件 account.x :

program ACCOUNT{ version ACCOUNT_VER{ int deposit(int) = 2; int withdraw(int) = 1; }=1;}=0x20010929;

编译后生成三个主要文件:account.h account_clnt.c account_svc.c

软件互操作 31/50软件构件与中间件技术

extern "C" {#define ACCOUNT 0x20010929#define ACCOUNT_VER 1#define deposit 2extern int * deposit_1(int *, CLIENT *);extern int * deposit_1_svc(int *, struct svc_req *);#define withdraw 1extern int * withdraw_1(int *, CLIENT *);extern int * withdraw_1_svc(int *, struct svc_req *);extern int account_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);}

account.h

软件互操作 32/50软件构件与中间件技术account_clnt.c

static struct timeval TIMEOUT = { 25, 0 };int * deposit_1(int *argp, CLIENT *clnt){

static int clnt_res;memset((char *)&clnt_res, 0, sizeof(clnt_res));if (clnt_call (clnt, deposit, (xdrproc_t) xdr_int, (caddr_t) argp,

(xdrproc_t) xdr_int, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) {return (NULL);

}return (&clnt_res);

}int * withdraw_1(int *argp, CLIENT *clnt){

static int clnt_res;memset((char *)&clnt_res, 0, sizeof(clnt_res));if (clnt_call (clnt, withdraw, (xdrproc_t) xdr_int, (caddr_t) argp, (xdrproc_t) xdr_int, (caddr_t) &clnt_res,TIMEOUT) != RPC_SUCCESS) {

return (NULL);}return (&clnt_res);

}

软件互操作 33/50软件构件与中间件技术

int main (int argc, char **argv){register SVCXPRT *transp;pmap_unset (ACCOUNT, ACCOUNT_VER);

transp = svctcp_create(RPC_ANYSOCK, 0, 0);if (transp == NULL) {

fprintf (stderr, "%s", "cannot create tcp service.");exit(1);

}if (!svc_register(transp, ACCOUNT, ACCOUNT_VER, account_1, IPPROTO_TCP)) {

fprintf (stderr, "%s", "unable to register (ACCOUNT, ACCOUNT_VER, tcp).");exit(1);

}svc_run ();

 fprintf (stderr, "%s", "svc_run returned");exit (1);

}

account_svc.c

软件互操作 34/50软件构件与中间件技术static void account_1(struct svc_req *rqstp, register SVCXPRT *transp){

union {int deposit_1_arg;int withdraw_1_arg;

} argument;char *result;xdrproc_t _xdr_argument, _xdr_result;char *(*local)(char *, struct svc_req *);switch (rqstp->rq_proc) {case NULLPROC:

(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);return;

case deposit:_xdr_argument = (xdrproc_t) xdr_int;_xdr_result = (xdrproc_t) xdr_int;local = (char *(*)(char *, struct svc_req *)) deposit_1_svc;break;

case withdraw:_xdr_argument = (xdrproc_t) xdr_int;_xdr_result = (xdrproc_t) xdr_int;local = (char *(*)(char *, struct svc_req *)) withdraw_1_svc;break;

软件互操作 35/50软件构件与中间件技术default:

svcerr_noproc (transp);return;

}memset ((char *)&argument, 0, sizeof (argument));if (!svc_getargs (transp, _xdr_argument, (caddr_t) &argument)) {

svcerr_decode (transp);return;

}result = (*local)((char *)&argument, rqstp);if (result != NULL && !svc_sendreply(transp, _xdr_result, result)) {

svcerr_systemerr (transp);}if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) {

fprintf (stderr, "%s", "unable to free arguments");exit (1);

}return;

}

软件互操作 36/50软件构件与中间件技术2 、编写实现具体服务功能的代码

#include "account.h"int total= 10000;int * deposit_1_svc(int *argp, struct svc_req *rqstp){ static int result; total= total + *argp ; result = total; printf(“new total =%d”, total); return &result;}int * withdraw_1_svc(int *argp, struct svc_req *rqstp){ static int result; total= total - *argp ; result = total; printf(“new total =%d”, total); return &result;}

server.c

软件互操作 37/50软件构件与中间件技术3 、编译、连接,产生可执行的服务器程序

cc –o server server.c account_svc.c

软件互操作 38/50软件构件与中间件技术4 、编写客户端代码

#include "account.h"void account_1(char *host){

CLIENT *clnt;int *result_1;int deposit_1_arg=1000;int *result_2;int withdraw_1_arg=2000;clnt = clnt_create (host, ACCOUNT, ACCOUNT_VER, "tcp");result_1 = deposit_1(&deposit_1_arg, clnt);

printf(“result =%s”, result_1);result_2 = withdraw_1(&withdraw_1_arg, clnt);printf(“result =%s”, result_2);clnt_destroy (clnt);

}int main (int argc, char *argv[]){

char *host;if (argc < 2) { printf ("usage: %s server_host\n", argv[0]);exit (1); }host = argv[1];account_1 (host);

}

client.c

软件互操作 39/50软件构件与中间件技术5 、编译、连接,产生客户程序

cc –o client client.c account_clnt.c

软件互操作 40/50软件构件与中间件技术6 、运行服务器端程序 server

7 、运行客户端程序 client 128.0.0.1(server 的 IP 地址 )

服务器端应当显示:new total = 11000

new total = 9000

客户端应当显示: result = 11000

result = 9000

软件互操作 41/50软件构件与中间件技术

四、互操作体系为支持

应用层的某一实体使用另一实体而制定的一套技术规范

软件互操作 42/50软件构件与中间件技术

1 、底层协议2 、互操作消息3 、互操作接口定义4 、互操作查找方式5 、现有体系比较

内 容

软件互操作 43/50软件构件与中间件技术

互操作消息

客户端指代 互操作接口定义语言

互操作协议

网络基础设施 网络基础设施

互操作消息

服务器端指代

客户端程序

服务器端程序

互操作实现(以RPC 为例)

互操作查找

互操作规范

底层协议

决定

决定

软件互操作 44/50软件构件与中间件技术

软件互操作体系与人类交互过程的比较• 底层协议提供了基本的通信基础• 互操作消息是软件之间进行交互时所表述的语言

互操作协议是对这些语言的语法说明• 互操作接口定义是软件之间的一种约定

接口定义语言是合约的撰写规则 • 互操作查找是交互双方建立联系的途径

包括白页、黄页、绿页等多种途径

软件互操作 45/50软件构件与中间件技术1 、 底层协议底层协议是互操作协议所依赖的底层通信机制目前最受重视的协议 是前面讲过的 TCP/IP 协议也可以是 ATM 等其它协议

软件互操作 46/50软件构件与中间件技术2 、互操作协议RPC 中关于字节序、数据表示等问题的解决方法体现了通信双方之间关于消息的 数据格式 消息的类型 等的约定类似的约定还有 服务器的管理 等等所有这些约定 共同构成了互操作的高层协议互操作协议一般独立于底层协议即互操作协议可以向不同的底层协议进行映射从而由不同的底层协议进行支持互操作协议一般都比较烦琐其实现由应用服务器开发者承担应用系统的开发者在开发具体系统时不必关心协议的实现问题

软件互操作 47/50软件构件与中间件技术 3 、互操作接口定义语言

客户指代主要完成上层代码(客户程序、服务器程序)与底层代码( RPC API 等)之间的“映射” 其参数传递、编排、服务器定位等功能完全与应用系统具体的业务逻辑实现细节无关因此 只要系统明确定义了服务器的接口即可以产生与该接口对应的指代接口定义语言( Interface Definition Language )描述了 客户与服务器之间的接口

软件互操作 48/50软件构件与中间件技术4 、互操作查找

互操作查找方式主要是指服务器的定位根据自己掌握的信息客户如何才能查找到具体服务器这实际上涉及 服务器端服务信息的发布服务信息的管理等问题

软件互操作 49/50软件构件与中间件技术

互操作体系名称 互操作协议 接口定义语言 服务查找RPC RPC IDL RPC注册DCOM ORPC MIDL 系统注册CORBA GIOP ( IIOP) IDL 命名服务J2EE JRMP Java Interface JNDI

Web Services SOAP WSDL UDDI

5 、现有体系比较

软件互操作 50/50软件构件与中间件技术

思 考 题消息传递、互操作、协同工作之间的关系是什么 ? RPC 是如何工作的?不同互操作体系的异同点是什么?

作业:完成 RPC 实验