### Tuxedo培训教材知识点详解 #### 一、一个简单的例子 ##### 1.1 客户端程序 - **程序源码 (simpcl.c):** ```c #include<stdio.h> /* UNIX */ #include"atmi.h" /* TUXEDO */ main(argc, argv) { int argc; char *argv[]; char *sendbuf; /* 发送包 */ char *rcvbuf; /* 返回包 */ int sendlen; /* 发送包长度 */ int rcvlen; /* 返回包长度 */ int ret; /* 返回标志 */ if (argc != 2) { fprintf(stderr, "Usage: simpcl string\n"); exit(1); } /* Attach to System/T as a Client Process */ if (tpinit((TPINIT *)NULL) == -1) { fprintf(stderr, "Tpinit failed\n"); exit(1); } sendlen = strlen(argv[1]); if ((sendbuf = (char *)tpalloc("STRING", NULL, sendlen + 1)) == NULL) { fprintf(stderr, "Error allocating send buffer\n"); tpterm(); exit(1); } if ((rcvbuf = (char *)tpalloc("STRING", NULL, sendlen + 1)) == NULL) { fprintf(stderr, "Error allocating receive buffer\n"); tpfree(sendbuf); tpterm(); exit(1); } strcpy(sendbuf, argv[1]); ret = tpcall("TOUPPER", sendbuf, NULL, &rcvbuf, &rcvlen, 0); if (ret == -1) { fprintf(stderr, "Can't send request to service TOUPPER\n"); fprintf(stderr, "Tperrno=%d, %s\n", tperrno, tmemsgs[tperrno]); tpfree(sendbuf); tpfree(rcvbuf); tpterm(); exit(1); } printf("Returned string is: %s\n", rcvbuf); /* Free Buffers & Detach from System/T */ tpfree(sendbuf); tpfree(rcvbuf); tpterm(); } ``` - **编译客户端程序:** - 使用命令 `$ buildclient -o simpcl -f simpcl.c` 编译生成可执行程序 `simpcl`。 ##### 1.2 服务器端程序 - **程序源码 (simpserv.c):** ```c #include<stdio.h> #include<ctype.h> #include<atmi.h> /* TUXEDO Header File */ #include<userlog.h> /* TUXEDO Header File */ /* This function is the server side of the example program */ void TOUPPER(TPSVCINFO *svcinfo) { char *inbuf = svcinfo->buf; /* 输入缓冲区 */ char *outbuf = svcinfo->buf; /* 输出缓冲区 */ int inlen = svcinfo->buflen; /* 输入缓冲区长度 */ int i; /* Convert the incoming string to uppercase */ for (i = 0; i < inlen; i++) { outbuf[i] = toupper(inbuf[i]); } /* Send the result back to the client */ svcinfo->buflen = inlen; } ``` - **编译服务器端程序:** - 使用命令 `$ buildserver -o simpserv -f simpserv.c` 编译生成可执行程序 `simpserv`。 ##### 1.3 配置文件 - **配置文件源码 (ubbsimple):** - 配置文件通常用于定义服务、环境变量等。 - 示例配置文件可能包含服务名称、缓冲区大小等配置项。 - **设置环境变量:** - 例如: 设置 `TP_HOME` 指向 Tuxedo 安装目录。 - 通过命令 `export TP_HOME=/path/to/tuxedo` 设置环境变量。 - **编译配置文件:** - 无需特别编译配置文件,但需要确保配置正确无误。 ##### 1.4 启动应用服务 - 使用命令 `$ ubbstart -s simpserv` 启动服务器程序。 ##### 1.5 运行示例程序 - 使用编译好的客户端程序 `simpcl` 并提供参数运行。 ##### 1.6 停止应用服务 - 使用命令 `$ ubbstop -s simpserv` 停止服务器程序。 #### 二、编写客户端程序 - **基本处理流程:** 1. 初始化 Tuxedo 客户端 (`tpinit`)。 2. 连接应用程序 (`tpconnect`)。 3. 分配缓冲区 (`tpalloc`)。 4. 调用服务请求 (`tpcall`)。 5. 释放已申请的缓冲区 (`tpfree`)。 6. 断开与应用程序的连接 (`tpdisconnect`)。 - **连接应用程序:** - 使用 `tpconnect` 函数连接到 Tuxedo 应用程序。 - 该函数需在进行任何 Tuxedo 调用前调用。 - **分配缓冲区:** - 使用 `tpalloc` 函数根据指定类型和大小分配缓冲区。 - 常见类型包括 `STRING`, `CARRAY`, `VIEW/VIEW32`, `FML/FML32`。 - **调用服务请求:** - 使用 `tpcall` 函数发起服务请求。 - 参数包括服务名、输入缓冲区、输出缓冲区等。 - **释放已申请的缓冲区:** - 使用 `tpfree` 函数释放之前分配的缓冲区。 - **断开与应用程序的连接:** - 使用 `tpdisconnect` 函数断开与 Tuxedo 应用程序的连接。 #### 三、编写服务器端程序 - **TPSVCINFO 结构:** - `TPSVCINFO` 是 Tuxedo 服务器端处理函数的标准参数类型。 - 包含了服务调用的相关信息,如缓冲区指针、缓冲区长度等。 - **服务返回:** - 服务处理完成后,需要通过修改 `TPSVCINFO` 的成员变量(如 `buflen`)来返回结果。 #### 四、通讯缓冲区类型 - **STRING:** - 用于存储固定长度的字符串数据。 - 适用于较小的数据传输。 - **CARRAY:** - 用于存储非结构化的二进制数据。 - 可以用于存储较大或复杂的数据结构。 - **VIEW/VIEW32:** - 用于存储结构化的数据,支持位字段、数组等复杂类型。 - `VIEW` 适用于 16 位环境,`VIEW32` 适用于 32 位环境。 - **FML/FML32:** - 用于存储格式化的消息数据。 - 支持对数据的字段进行访问操作。 - `FML` 适用于 16 位环境,`FML32` 适用于 32 位环境。 - **域访问函数:** - 提供了一系列函数用于读写 FML/FML32 缓冲区中的字段数据。 - 例如: `fmlget` 用于获取字段值,`fmlput` 用于设置字段值。 - **使用例:** - 示例代码展示了如何使用 FML 函数来操作 FML 缓冲区中的数据字段。 #### 五、网络环境搭建说明 - **网络环境:** - 描述如何在一个局域网环境下部署 Tuxedo 应用程序。 - **客户端处理:** - 包括编译客户端程序、设置服务主机和通讯端口等步骤。 - 需要确保客户端能够正确连接到服务器。 - **服务器端处理:** - 包括修改 `ubbconfig` 文件、启动应用服务等步骤。 - 需要确保服务器端能够正常接收并处理来自客户端的服务请求。 - **修改 ubbconfig:** - `ubbconfig` 文件是 Tuxedo 服务器的重要配置文件。 - 需要设置监听端口、最大并发连接数等关键参数。 - **ubbconfig 例:** - 提供了一个具体的 `ubbconfig` 文件配置示例。 - **编辑配置文件:** - 根据实际需求编辑配置文件,确保配置正确。 - **启动应用服务:** - 使用命令 `$ ubbstart -s <服务名>` 启动服务。 - **关闭应用服务:** - 使用命令 `$ ubbstop -s <服务名>` 关闭服务。 #### 六、多机环境搭建说明 - **多机环境:** - 描述如何在多个物理机器上部署 Tuxedo 应用程序。 - 包括客户端和服务器端的配置。 - **客户端处理:** - 客户端需要能够连接到位于远程服务器上的 Tuxedo 服务。 - 需要设置正确的服务主机和通讯端口。 - **服务器端处理:** - 包括添加服务端口、启动 `tlisten` 进程、创建 TLOG 等步骤。 - 需要确保服务器端能够正确处理来自多个客户端的服务请求。 - **添加服务端口:** - 在 `ubbconfig` 文件中添加新的监听端口。 - 确保每个服务都有唯一的端口号。 - **tlisten 进程:** - `tlisten` 进程负责监听指定端口上的服务请求。 - 需要在服务器上启动 `tlisten` 进程。 - **创建 TLOG:** - TLOG 是 Tuxedo 用来记录事务日志的文件。 - 创建 TLOG 有助于跟踪事务状态和恢复操作。 - **修改 ubbconfig:** - 在 `ubbconfig` 文件中添加新的服务配置。 - **ubbconfig 例:** - 提供了一个具体的 `ubbconfig` 文件配置示例。 - **编辑配置文件:** - 根据实际需求编辑配置文件,确保配置正确。 - **启动应用服务:** - 使用命令 `$ ubbstart -s <服务名>` 启动服务。 - **关闭应用服务:** - 使用命令 `$ ubbstop -s <服务名>` 关闭服务。 以上为 Tuxedo 培训教材的核心知识点详解。这些知识点涵盖了 Tuxedo 开发的基础概念、编程实践以及网络部署等方面。通过学习这些内容,可以系统地了解 Tuxedo 的工作原理,并掌握如何开发和部署基于 Tuxedo 的分布式应用程序。
- 粉丝: 0
- 资源: 62
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助