第七章TUXEDO的客户端编程-融金教育.docx
《第七章TUXEDO的客户端编程-融金教育.docx》由会员分享,可在线阅读,更多相关《第七章TUXEDO的客户端编程-融金教育.docx(36页珍藏版)》请在三一办公上搜索。
1、第七章:TUXEDO的客户端编程7.1 Tuxedo的客户端简介:tuxedo有两种客户端: 本地客户端和远程客户端。NATIVE CLIENT(本地客户端): 是指与TUXEDO服务器在同一台机器上,不用通过网络就可以访问到TUXEDO服务器的客户端 。WORSTATION CLIENT(本地客户端):是指要通过网络才可以访问到TUXEDO服务器的客户端。下图为TUXEDO应用系统的客户端访问TUXEDO服务器上的服务的过程图。说明:WS(Workstation Extension Product) 用于指TUXEDO产品的客户端部分WSC Workstation ClientWSL(Wor
2、kstation Listener)TUXEDO系统自带的一个SERVER,它侦听一个指定的端口,WSC最初与该SERVER建立连接WSH(Workstation Handler)TUXEDO系统自带的一个SERVER,由它处理WSC与TUXEDO SERVER之间的通讯。Bulletin Board(公告板)TUXEDO把系统的配置保存在一个共享内存中,该共享内存称为公告板(BB)BBLTUXEDO的管理进程,主要对公告板等进行管理Workstation Client与TUXEDO SERVER建立连接的过程为:1 WSC 调用tpinit()或tpchkauth()2 WSC采用在WSNA
3、DDR中指定的IP地址与服务端的WSL建立连接3 WSL为该WSC指定一个WSH,并把该WSH的侦听端口返回给WSC4 WSC采用返回的端口与指定的WSH建立连接,并与WSL断开连接,这之后WSC与TUXEDO SERVER之间的通讯通过WSH进行处理,与WSL无关。5 tpinit()或tpchkauth()调用返回。本地客户端与远程客户端的主要区别1. 本地客户端只能用C语言或COBAL语言编写,远程客户端可以用几乎所有的编程语言编写。2. 在远程客户端所在的机器上要安装TUXEDO的客户端软件,并且在设置相应的环境变量;在本地客户端上不用3. 用buildclient编译远程客户端程序时
4、要加 W,编译本地客户端则不用与远程客户端有关的配置:1 在MACHINES中要配置MAXWSCLIENTS,即最多可以有多少个远程客户端同时连接到该服务器上。2 在SERVERS中要配置SERVER:WSLWSL SRVGRP=GROUP1 SRVID=1116 CLOPT=-A - -n /192.168.120.113:8888 -m 2 -M 5 -x 6CLOPT中可带的参数为:CLOPT= -A servopts_options - -n netaddr -d device -w WSHname-t timeout_factor-T Client_timeout -m minh-M
5、 maxh-x mpx_factor -p minwshport-P maxwshport -I init_timeout-c compression_threshold -k compression_threshold -z bits-Z bits-H external_netaddr -N network_timeout-Kclient|handler|both|none参数说明:-n netaddr: WSL的侦听端口,远程客户端通过该端口与服务器建立连接-m minh : 最少启动多少个WSH进程-M maxh: 最多启动多少个WSH进程,默认值为MAXWSCLIENTS/m-x mp
6、x_factor:每个WSH进程可以同时与多少个远程客户端建立连接-c compression_threshold如果在远程客户端与服务器之间传送的数据包大小(单位为字节)超过-c指定的参数,就自动进行数据压缩,-T Client_timeout: 指定一个远程客户端的空闲时间,如果该远程客户端在client_timeout这么长的时间内没有做任何调用,WSH将断开与该远程客户端的连接。单位为分钟,如果没有指点该参数,那么WSH永远不会自动断开远程客户端的连接-t timeout_factor: 指定远程客户端与WSH建立连接的时间,如果在-t指定的时间内还没有建立连接,那么连接将失败。如果没
7、有采用安全认证方式默认为3*SCANUNIT秒,。如果采用安全认证方式默认为6*SCANUNIT秒, -p minwshport-P maxwshport:指定WSH可以使用的端口范围:如果远程客户端要跨越防火墙才能访问该TUXEDO应用系统,在WSL中要指定该参数,指定WSH可以使用的端口范围,并让防火墙允许访问这些端口。如果不指定,TUXEDO会根据系统端口的使用情况进行分配,而分配的端口防火墙不允许通过,造成CLIENT无法调用TUXEDO SERVER。如下面的设置指定WSH可用的端口范围为17010 17030。WSLSRVGRP=GROUP1SRVID=1CLOPT=-A - -n
8、 /133.101.6.26:17009 -m 10 -M 10 -x 10 -p 17010 -P 17030在远程客户端的机器上要设置的环境变量TUXDIR (必需):TUXEDO客户端在该机器上的安装目录WSNADDR(必需):远程客户端通过该IP地址与服务器建立连接,它的值为-n参数的值,如在上面的配置中为:SET WSNADDR= /192.168.120.113:8888WSTYPE(可选): 该客户端的类型,如果与服务器的类型一样,那么在它们之间进行数据传送时不用进行编码解码工作。其他不常用的环境变量可参考TUXEDO的联机文档。客户端的编程模式:在3层结构中,CLIENT是属与
9、表示层,表示层主要处理与用户交互,它的功能可概括为:1、提供应用的用户交互接口,即主要通过图形化的用户界面,取的用户的输入数据2、与TUXEDO 应用服务器建立连接3、调用TUXEDO应用服务器上的服务(SERVICE),把客户端的输入参数放入输出缓冲区。4、TUXEDO应用服务器调用相应的SERVICE处理客户端的请求,把处理结果通过客户端的输入缓冲区返回给客户端。 客户端与服务端之间的通讯方式有以下几种:1、同步调用:2、异步调用3、会话方式:4、可靠消息队列5、广播方式6、发布/订阅在下一章我们再具体介绍7.2 CLIENT的ATMI介绍客户端通过调用TUXEDO提供的编程API(ATM
10、I)来编写程序,下面介绍一些客户端主要的ATMI与连接的建立与断开有关的ATMI为了与TUXEDO SERVER建立连接,TUXEDO CLIENT要调用TPCHKAUTH()检查该TUXEDO SERVER所采用的安全方式,并根据得到的值做相应的处理,然后调用TPINIT()建立与TUXEDO的连接,在TUXEOD SERVER的结果返回之后,调用TPTERM()断开与TUXEDO SERVER的连接.int tpchkauth()描述: 检查该TUXEDO SERVER所采用的安全方式参数:无返回值: TPNOAUTH:不需要认证 TPSYSAUTH:需要口令认证 TPAPPSUTH:需要
11、口令认证,并且还需要应用级的认证或授权. -1:调用失败, 错误号保存在全局变量tperrno中。int tpinit(TPINIT *tpinfo)描述: 与TUXEDO SERVER建立连接参数:TPINFO返回值: 失败返回-1, 错误号保存在全局变量tperrno中。TPINIT结构体在atmi.h中的定义如下structtpinfo_t char usrnameMAXTIDENT+2;/* client user name */char cltnameMAXTIDENT+2;/* application client name */char passwdMAXTIDENT+2;/*
12、application password */char grpnameMAXTIDENT+2;/* client group name */long flags;/* initialization flags */long datalen;/* length of app specific data */long data;/* placeholder for app data */;typedefstructtpinfo_t TPINIT;说明:username,cltname,passwd,grpname,data,datalen用于安全认证中flags:用于定义以何种方式通知该客户端一个
13、UNSOLICTED MESSAGE的到来.它的值可以为:TPU-SIGTPU-DIPTPU-IGNTPSA-FASTPATHTPSA-PROTECTEDint tpterm()描述: 断开与TUXEDO SERVER建立连接参数:无返回值: 失败返回-1, 错误号保存在全局变量tperrno中。与请求TUXEDO SERVER 有关的ATMIint tpcall(char *svc, char *idata, long ilen, char *odata, long *olen, long flags)描述:客户端同步调用服务端的名为svc的SERVICE,参数: *svc:SERVICE的
14、名称char *idata: 输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内long ilen: 输入缓冲区的长度char *odata 输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内long *olen:输出缓冲区的长度 long flags: 调用标志,由以下几个:TPNOTRAN如果调用svc的客户端当前在TRANSACTION方式下,那么svc不参与当前的TRANSACTION。TPNOCHANGE如果服务端返回的缓冲区类型与客户端定义的缓冲区(odata)类型不一致,默认情况下,odata会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该FLAG,那么当出现这种
15、情况时,不进行缓冲区类型转换,并且会保错。TPNOBLOCK默认情况下,如果客户端有阻塞条件存在(如CLIENT的TCP/IP中的缓冲区满,磁盘I/O忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设置了TPNOBLOCK,当客户端有阻塞条件存在时,TPCALL()会立刻返回并报错. 注意TPNOBLOCK只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错TPNOTIME如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在TRANSACTION模式下,当到了事务的超时时间,还是会报超
16、时错误并返回。TPSIGRSTRT如果在进行系统调用时,被信号中断,该系统调用会重新进行。调用成功返回0,失败返回-1, 错误号保存在全局变量tperrno中。int tpacall(char *svc, char *data, long len, long flags)描述: 客户端异步调用服务端的名为svc的SERVICE,不等服务端返回结果,程序可继续往下走,在某个地方调用tpgetrply()取的服务端的返回参数:char *svc, char *data, long len参数的含义与tpcall()中的一样flags 可设置为:TPNOTRAN, TPNOREPLY, TPNOBL
17、OCKTPNOTIME, TPSIGRSTRT.TPNOTRAN, TPNOBLOCKTPNOTIME, TPSIGRSTRT的含义与与tpcall()中的一样TPNOREPLY:调用tpacall()的客户端不想接收SEVER端的应答。如果设置了TPNOREPLY:服务端不会给该客户端发送应答。返回值: 失败返回-1,成功返回一个HANDLER,可作为tpgetrply的参数,用于取应答int tpgetrply(int *cd, char *data, long *len, long flags)描述:取出服务端对tpacall()的应答。参数: cd tpacall()返回的HANDLE
18、Rchar *data返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内long *len:返回缓冲区的长度flags:可以是:TPNOBLOCK, TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,从服务器的应答队列中取第一个可用的消息),TPNOCHANGE 返回值: 失败返回-1,错误号保存在全局变量tperrno中。int tpcancel(int handle)描述: 如果当前的程序不处于事务模式中,取消对tpacall()的应答, 如果处于事务模式中,则不能取消对tpacall()的应答,该调用会失败.参数: tpacall()返回的HANDLER返回值:
19、 失败返回-1,错误号保存在全局变量tperrno中。int tpgprio()描述:返回最近发送(tpcall(),tpacall()或接收(tpgetrply()的一个消息的优先级参数:无返回值: 1-100消息的优先级,值越高, 优先级越高 失败返回-1, 错误号保存在全局变量tperrno中。struct int hdl; /* handle*/int pr; /* priority*/ paSIZE;for (i=0; irequests; i+) /* Determine service and data for request */pa i.hdl = tpacall(Svc,
20、buf, len, flags);/* Save priority used to send request */pai.pr = tpgprio();/* Use qsort(3) routine to sort handles in priority order */qsort(char*) pa, requests, sizeof(pa0), cmpfcn);for (i=0; i requests; i+) tpgetrply(&pai.hdl, &rbufp, &rlen, rflags);int tpsprio (int prio, long flags)描述: 设置下一个要发送的
21、消息的优先级参数: 0- prio为相对值, 设置下一个要发送的消息的优先级为现在的优先级加上prio TPABSOLUTE: prio为绝对值, 设置下一个要发送的消息的优先级为prio返回值: 失败返回-1,错误号保存在全局变量tperrno中。与请求错误处理有关的ATMIchar *tpstrerror(int tperrno) 描述:返回错误号为tperrno的错误描述参数: tperrno:在atmi.h中定义的全局变量,用于标识错误号,类似于C中的errno返回值: 失败返回NULL,成功返回错误号为tperrno的错误描述.int tperrordetail(long flags
22、)描述: 返回当前进程或线程最近调用ATMI的出错的更详细的描述参数:设为0返回值: 如果没有错误返回0,有错误返回错误描述号char * tpstrerrordetail(int err, long flags)描述: 返回错误描述号err的详细描述信息参数: err : tperrordetail()的返回值, flags: 设为0返回值: 失败返回NULL,成功返回详细描述信息7.3 采用C语言编写TUXEDO的客户端程序如果是采用C语言编写TUXEDO的客户端程序,可直接采用ATMI的函数,这些函数在atmi.h中定义.采用C语言编写TUXEDO的客户端的例子在此不列举,可参考simp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 TUXEDO 客户端 编程 教育
链接地址:https://www.31ppt.com/p-2030140.html