[转帖]Tuxedo 会话ATMI_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3994 | 回复: 0   主题: [转帖]Tuxedo 会话ATMI        下一篇 
风往北吹
注册用户
等级:下士
经验:173
发帖:6
精华:0
注册:2012-12-19
状态:离线
发送短消息息给风往北吹 加好友    发送短消息息给风往北吹 发消息
发表于: IP:您无权察看 2012-12-20 12:21:03 | [全部帖] [楼主帖] 楼主

1.概念
会话是一个半双工的链路,同一时刻只有一方能发送,另一方只能接收。
会话的client方开始时也要调用tpinit()加入到tuxedo应用中,通讯使用的缓冲区也要用tpalloc()分配。
在会话中有如下几个角色:
originator, initiator:执行tpconnect开始会话的一方;
subordinate:接收tpconnect的会话server;
sender:控制着会话连接的一方;
receiver:没有会话连接控制权的一方。

2.tpconnect
建立与会话service的连接。

int tpconnect(char* name, char *data, long length, long flags);


参数说明:
name:会话service的名称;
data:发送数据的buffer,可以是NULL;
length:buffer的长度(必要的话);
flags:标志。有如下值:
TPNOTRAN:与tpacall介绍的相同;

TPNOBLOCK:(同上);
TPNOTIME:(同上);
TPSIGRSTRT:(同上);


TPSENDONLY:对建立的连接具有控制权,initiator将发送数据,被调用方只能接收数据;
TPRECVONLY:建立连接后把控制权交给被调用方,initiator只能接收数据;
TPSENDONLY和TPRECVONLY必须指定一个,以决定会话的控制权和方向,之后控制权和方向的改变由sender决定。
成功返回一个非负的连接描述符,供后面的tpsend()、tprecv()和tpdiscon()使用。失败返回-1。
失败原因:
无效的参数;
太多的连接要建立。每个进程允许建立10条连接;
错误的service名或非会话service。

3.tpsend
在一个会话连接中发送消息。

int tpsend(int cd, char *data, long length, long flags,
long *revent);


参数说明:
cd:会话连接描述符(tpconnect返回值);
data:发送的数据指针。可以为NULL,如交换控制权;
length:发送数据的长度(必要的话);
flags:标志。
TPNOBLOCK:同tpacall;

TPNOTIME:(同上);
TPSIGRSTRT:(同上);


TPRECVONLY:在发送数据之后,放弃连接的控制权;这将导致对方收到TPEV_SENDONLY事件;
revent:当tperrno为TPEEVENT时返回的事件值。
失败时函数返回-1,tperrno被设置。当tperrno为TPEEVENT时,导致失败的具体事件存放在revent中。
调用tpsend()可能出现的revent值有:
TPEV_DISCONIMM:当会话的originator执行tpdiscon()、tpreturn()、tpcommit()时subordinate会收到该事件;当进程或网络错误时originator也会收到此事件;
TPEV_SVCFAIL:当subordinate没有会话的控制权而使用TPFAIL和TPEXIT执行tpreturn时originator将收到该事件;
TPEV_SVCERR:当subordinate没有会话的控制权而使用TPSUCCESS执行tpreturn时originator将收到该事件;




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