[转帖]Tuxedo Quick Start 11 TUXEDO的客户端编程_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3969 | 回复: 0   主题: [转帖]Tuxedo Quick Start 11 TUXEDO的客户端编程        下一篇 
鲲鹏展翅
注册用户
等级:少校
经验:1148
发帖:79
精华:9
注册:2012-11-19
状态:离线
发送短消息息给鲲鹏展翅 加好友    发送短消息息给鲲鹏展翅 发消息
发表于: IP:您无权察看 2012-11-26 9:20:39 | [全部帖] [楼主帖] 楼主

tuxedo有两种客户端,本地客户端和本地客户端。
NATIVE CLIENT(本地客户端):是指与TUXEDO服务器在同一台机器上,不用通过网络就可以访
问到TUXEDO服务器的客户端 。
WORSTATION  CLIENT(本地客户端):是指要通过网络才可以访问到TUXEDO服务器的客户端。

Workstation Client与TUXEDO SERVER建立连接的过程为:
1.        WSC 调用tpinit()或tpchkauth()
2.        WSC采用在WSNADDR中指定的IP地址与服务端的WSL建立连接
3.        WSL为该WSC指定一个WSH,并把该WSH的侦听端口返回给WSC
4.        WSC采用返回的端口与指定的WSH建立连接,并与WSL断开连接,这之后WSC与TUXEDO SERVER之间的通讯通过WSH进行处理,与WSL无关。
5.        tpinit()或tpchkauth()调用返回。

本地客户端与远程客户端的主要区别
1.        本地客户端只能用C语言或COBAL语言编写,远程客户端可以用几乎所有的编程语言编
写。
2.        在远程客户端所在的机器上要安装tuxedo的客户端软件,并且在设置相应的环境变量;
在本地客户端上不用
3.用buildclient编译远程客户端程序时要加 –W,编译本地客户端则不用

与远程客户端有关的配置:
1.        在MACHINES中要配置MAXWSCLIENTS,即最多可以有多少个远程客户端同时连接
到该服务器上。
2.        在SERVERS中要配置SERVER:WSL

WSL  SRVGRP="GROUP1" SRVID=1116
CLOPT="-A -- -n //192.168.120.113:8888 -m 2 -M 5 -x 6"


CLOPT中可带的参数为:

CLOPT="[ -A ] [servopts_options] -- -n netaddr [-d device]
[-w WSHname][-t timeout_factor][-T Client_timeout]
[-m minh][-M 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][-K{client|handler|both|none}]"


参数说明:
-n netaddr:    WSL的侦听端口,远程客户端通过该端口与服务器建立连接
-m minh :           最少启动多少个WSL进程
-M maxh:           最多启动多少个WSL进程,默认值为MAXWSCLIENTS/m
-x mpx_factor:每个WSH进程可以同时与多少个远程客户端建立连接

-c compression_threshold


如果在远程客户端与服务器之间传送的数据包大小(单位为字节)超过-c指定的参
数,就自动进行数据压缩,

-T Client_timeout: 指定一个远程客户端的空闲时间,如果该远程客户端在client_timeout这么长的时间内没有做任何调用,WSH将断开与该远程客户端的连接。单位为分钟,如果没有指点该参数,那么WSH永远不会自动断开远程客户端的连接

-t timeout_factor: 指定远程客户端与WSH建立连接的时间,如果在-t指定的时间内还没有建立连接,那么连接将失败。如果没有采用安全认证方式默认为3*SCANUNIT秒,。如果采用安全认证方式默认为6*SCANUNIT秒,

-N:


[-p minwshport][-P maxwshport]:指定WSH可以使用的端口范围:
如果远程客户端要跨越防火墙才能访问该TUXEDO应用系统,在WSL中要指定该参数,指定WSH可以使用的端口范围,并让防火墙允许访问这些端口。如果不指定,TUXEDO会根据系统端口的使用情况进行分配,而分配的端口防火墙不允许通过,造成CLIENT无法调用TUXEDO SERVER。如下面的设置指定WSH可用的端口范围为17010 – 17030。

WSL        SRVGRP=GROUP1        SRVID=1
CLOPT="-A -- -n //133.101.6.26:17009  -m 10  -M 10 -x 10 -p 17010 -P 17030"


-H:通过代理访问

在远程客户端的机器上要设置的环境变量
TUXDIR(必须):TUXEDO客户端在该机器上的安装目录
WSNADDR(必须):远程客户端通过该IP地址与服务器建立连接,它的值为-n参数的值,
如在上面的配置中为:

SET WSNADDR= //192.168.120.113:8888


WSTYPE(可选):该客户端的类型,如果与服务器的类型一样,那么在它们之间进行数据
传送时不用进行编码解码工作。
其他不常用的环境变量可参考TUXEDO的联机文档。

在3层结构中,CLIENT是属与表示层,表示层主要处理与用户交互,它的功能可概括为:
1、提供应用的用户交互接口,即主要通过图形化的用户界面,取的用户的输入数据
2、与TUXEDO 应用服务器建立连接
3、调用TUXEDO应用服务器上的服务(SERVICE),把客户端的输入参数放入输出缓冲区。
4、TUXEDO应用服务器调用相应的SERVICE处理客户端的请求,把处理结果通过客户端的输
入缓冲区返回给客户端。

客户端与服务端之间的通讯方式有以下几种:
1、同步调用:
2、异步调用
3、会话方式:
4、/Q
5、消息
6、发布/订阅

下面介绍一些客户端主要的ATMI

与连接的建立与断开有关的ATMI
为了与TUXEDO SERVER建立连接,TUXEDO CLIENT要调用TPCHKAUTH()检查该TUXEDO SERVER所采用的安全方式,并根据得到的值做相应的处理,然后调用TPINIT()建立与TUXEDO的连接,在TUXEOD SERVER的结果返回
之后,调用TPTERM()断开与TUXEDO SERVER的连接.

int tpchkauth()


描述: 检查该TUXEDO SERVER所采用的安全方式
参数:无
返回值:
      TPNOAUTH:不需要认证
      TPSYSAUTH:需要口令认证
      TPAPPSUTH:需要口令认证,并且还需要应用级的认证或授权.
      -1:调用失败, 错误号保存在全局变量tperrno中。

int tpinit(TPINIT *tpinfo)


描述: 与TUXEDO SERVER建立连接
参数:TPINFO
返回值: 失败返回-1, 错误号保存在全局变量tperrno中。

TPINIT结构体在atmi.h中的定义如下

struct tpinfo_t {
      char usrname[MAXTIDENT+2]; /* client user name */
      char cltname[MAXTIDENT+2]; /* application client name */
      char passwd[MAXTIDENT+2]; /* application password */
      char grpname[MAXTIDENT+2]; /* client group name */
      long flags; /* initialization flags */
      long datalen; /* length of app specific data */
      long data; /* placeholder for app data */
};
typedef struct tpinfo_t TPINIT;


说明:username,cltname,passwd,grpname,data,datalen用于安全认证中
flags:用于定义以何种方式通知该客户端一个UNSOLICTED MESSAGE的到来.它的值可以为:

TPU-SIG
TPU-DIP
TPU-IGN
TPSA-FASTPATH
TPSA-PROTECTED
int tpterm()


描述: 断开与TUXEDO SERVER建立连接
参数:无
返回值: 失败返回-1, 错误号保存在全局变量tperrno中。

与请求TUXEDO SERVER 有关的ATMI

int tpcall(char *svc, char *idata, long ilen, char **odata, long   *olen, long flags)


描述:客户端同步调用服务端的名为svc的SERVICE,
参数:
*svc:SERVICE的名称
char *idata:输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内
long ilen:输入缓冲区的长度
char **odata输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内
long   *olen:输出缓冲区的长度   
long flags: 调用标志,由以下几个,

TPNOTRAN


如果调用svc的客户端当前在TRANSACTION方式下,那么svc不参与当前的TRANSACTION。

TPNOCHANGE


如果服务端返回的缓冲区类型与客户端定义的缓冲区(odata)类型不一致,默认情况下,odata会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该FLAG,那么当出现这种情况时,不进行缓冲区类型转换,并且会报错。

TPNOBLOCK


默认情况下,如果客户端有阻塞条件存在(如CLIENT的TCP/IP中的缓冲区满,磁盘I/O忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设置了TPNOBLOCK,当客户端有阻塞条件存在时,TPCALL()会立刻返回并报错. 注意TPNOBLOCK只对发送请求时起作用,如果在接���服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错

TPNOTIME


如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在TRANSACTION模式下,当到了 事务的超时时间,还是会报超时错误并返回。

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, TPNOBLOCKTPNOTIME, 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()返回的HANDLER
char **data返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内
long   *len:返回缓冲区的长度
flags:可以是:TPNOBLOCK, TPNOTIME,TPSIGRSTRT,TPGETANY(不管cd的值,从服务器的应答队列中取第一个可用的消息),TPNOCHANGE

返回值: 失败返回-1,错误号保存在全局变量tperrno中。

int tpcancel(int handle)


描述: 如果当前的程序不处于事务模式中,取消对tpacall()的应答, 如果处于事务模式中,则不能取消对tpacall()的应���,该调用会失败.
参数: tpacall()返回的HANDLER
返回值: 失败返回-1,错误号保存在全局变量tperrno中。

int tpgprio()


描述:返回最近发送(tpcall(),tpacall())或接收(tpgetrply())的一个消息的优先级
参数:无
返回值: 1-100消息的优先级,值越高, 优先级越高
        失败返回-1, 错误号保存在全局变量tperrno中。

struct {
      int hdl; /* handle*/
      int pr; /* priority*/
} pa[SIZE];
for (i=0; i<requests; i++) {
      /* Determine service and data for request */
      pa [i].hdl = tpacall(Svc, buf, len, flags);
      /* Save priority used to send request */
      pa[i].pr = tpgprio();
}
/* Use qsort(3) routine to sort handles in priority order */
qsort((char*) pa, requests, sizeof(pa[0]), cmpfcn);
for (i=0; i< requests; i++) {
      tpgetrply(&pa[i].hdl, &rbufp, &rlen, rflags);
}
int tpsprio (int prio, long flags)


描述: 设置下一个要发送的消息的优先级
参数: 0- prio为相对值, 设置下一个要发送的消息的优先级为现在的优先级加上prio
     TPABSOLUTE: prio为绝对值, 设置下一个要发送的消息的优先级为prio
返回值: 失败返回-1,错误号保存在全局变量tperrno中。

与请求错误处理有关的ATMI

char *tpstrerror(int tperrno)


描述:返回错误号为tperrno的错误描述
参数: tperrno:在atmi.h中定义的全局变量,用于标识错误号,类似于C中的errno
返回值: 失败返回NULL,成功返回错误号为tperrno的错误描述.

int tperrordetail(long flags)


描述: 返回当前进程或线程最近调用ATMI的出错的更详细的描述
参数:设为0
返回值: 如果没有错误返回0,有错误返回错误描述号

char * tpstrerrordetail(int err, long flags)


描述: 返回错误描述号err的详细描述信息
参数:
err : tperrordetail()的返回值,
flags: 设为0
返���值: 失败返回NULL,成功返回详细描述信息




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论