Tuxedo 通讯方式解析
本节根据tuxedo自带samples的例子,让其运行起来。并通过这个例子,深入的理解tuxedo的通讯方式。
进入tuxedo的安装目录,samples目录下自带了一些例子
[root@localhost atmi]# pwd
/hzh/tuxedo/tuxedo11gR1/samples/atmi
[root@localhost atmi]# ls
bankapp CSIMPAPP qsample simpapp ws xmlstockapp
creditapp libutrace rpcsimp STOCKAPP xmlfmlapp
凡是了解tuxedo 的同学都知道这里面有个著名的例子 simpapp ,它的作用就是把客户端发送的小写字母转换成大写字母返回给客户端。我们就把这个例子运行起来。
前期准备:
[root@localhost atmi]# cp -R simpapp/ /hzh/tuxedo/ 为了便于操作,把simpapp 拷贝到/hzh/tuxedo/ 目录下面。
[root@localhost tuxedo11gR1]# ls
bin help inventory lib samples udataobj
cobinclude include jre locale tux.env uninstaller
[root@localhost tuxedo11gR1]# cp -R tux.env /hzh/tuxedo/simpapp/ 把tuxedo 安装目录下的tux.env 配置文件拷贝到/hzh/tuxedo/simpapp/ 目录下
[root@localhost simpapp]# pwd
/hzh/tuxedo/simpapp
[root@localhost simpapp]# ls
README simpcl.c simpserv.c tux.env ubbsimple
配置运行 simpapp 例子
配置tux.env文件
[root@localhost simpapp]# vi tux.env 对配置文件进行修改

TUXDIR=/hzh/tuxedo/tuxedo11gR1; export TUXDIR
JAVA_HOME=$TUXDIR/jre; export JAVA_HOME
JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin
PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH
LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH
LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR APPDIR=/hzh/tuxedo/simpapp; export APPDIR
TUXCONFIG=$APPDIR/tuxconfig; export TUXCONFIG
LANG=C; export LANG

配置ubbsimple 文件
[root@localhost simpapp]# hostname //查看本机hostname
node1
[root@localhost simpapp]# vi ubbsimple

# (c) 2003 BEA Systems, Inc. All Rights Reserved.
#ident "@(#) samples/atmi/simpapp/ubbsimple $Revision: 1.7 $" #Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the <bracketed> items with the appropriate values. *RESOURCES
#IPCKEY <Replace with a valid IPC Key> #Example:
IPCKEY 123456 DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N *MACHINES
DEFAULT:
APPDIR="/hzh/tuxedo/simpapp"
TUXCONFIG="/hzh/tuxedo/simpapp/tuxconfig"
TUXDIR="/hzh/tuxedo/tuxedo11gR1"
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo" node1 LMID=simple //node1为本机hostname名 #Example:
#beatux LMID=simple *GROUPS
GROUP1
.......

注意:APPDIR、TUXCONFIG和TUXDIR三个选项的路径要与 tux.env 文件中的配置保持一致。
修改完成,保存退出
[root@localhost simpapp]# . ./tux.env
[root@localhost simpapp]# tmloadcf -y ubbsimple //运行此命令不出出任何提示,表示一切正常
[root@node1 simpapp]# buildserver -f simpserv.c -o simpserv -s TOUPPER //编译服务器端程序
[root@node1 simpapp]# buildclient -f simpcl.c -o simpcl //编译客户端程序
这里需要说明的是,buildserver和buildclient命令需要系统安装gcc 才能被执行,gcc -v 查看本机是否安装GCC ,这里就不介绍gcc的安装了。
[root@node1 simpapp]# tmboot -y 启动进程

Booting all admin and server processes in /hzh/tuxedo/simpapp/tuxconfig
INFO: Oracle Tuxedo, Version 11.1.1.2.0, 32-bit, Patch Level (none) Booting admin processes ... exec BBL -A :
process id=2628 ... Started. Booting server processes ... exec simpserv -A :
process id=2629 ... Started.
2 processes started. [root@node1 simpapp]# ps -ef 查看启动进程 root 2628 1 0 12:21 pts/2 00:00:00 BBL -C dom=simpapp -g 30002 -i 0
root 2629 1 0 12:21 pts/2 00:00:00 simpserv -C dom=simpapp -g 1 -i
root 2634 2558 0 12:23 pts/2 00:00:00 ps -ef
// 能找到上面几个进程表面已经启动成功

验证:
[root@node1 simpapp]# ./simpcl hello
Returned string is: HELLO
客户端发送一个小写的hello ,服务器端将返回一个大写的HELLO
[root@node1 simpapp]# tmshutdown -y //停止进程
IPC & TCP/IP
通过上面的配置,我们将tuxedo 一个小例子跑起来了,但是目前客户端与服务器同在一台机子上,同在一个机子上所使用的协议是IPC ,而我试验的环境是在win 7 下的下的虚拟机上运行centOS ,那么如何在win 7 下发送请求到centOS上呢?
IPC :inter Process Communication (进程间通讯),适用于同一台机子上进程与进程之间的通讯。IPC 包括共享内存,队列,信号量等几种形式。通过IPC的方式通讯效率高。
如果两个进程分别在不同的机子上想实现通讯,就要走TCP/IP协议。

[root@node1 simpapp]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:48:F5:9C
inet addr:192.168.0.107 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe48:f59c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:932 errors:0 dropped:0 overruns:0 frame:0
TX packets:693 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:79614 (77.7 KiB) TX bytes:89327 (87.2 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5895 errors:0 dropped:0 overruns:0 frame:0
TX packets:5895 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9015156 (8.5 MiB) TX bytes:9015156 (8.5 MiB)

结合上面信息再来分析,一台主机上的一个进程要想与另一台主机上的进程实现通讯,先将信息发送到eth0 网卡中,通过网线传输到另一台主机的eth0网卡,再由网卡传给另一个进程。
lo : local Loopback 表示本地环路,lo是一个特殊的网卡,两个进程之间通讯可以使用IPC协议,如果要使用TCP/IP协议的话就要通过lo这个特殊的网卡进行通讯。
通过上面的分析,我们知道两个进程间通讯有三种方式。
两个进程在同一台主机上:
一:通过IPC协议,使两个进程直接通讯,效率高。
二:通过TCP/IP协议,使用lo特殊网卡时行通讯。
两个进程在不同的两个主机上:
三:通过TCP/IP协议,使用eth0物理网卡进行通讯。
配置第二种方式通讯
我们现在使用的是第一种通讯方式,下面我们要将上面的修改的文件重新修改配置,来完成第二种方式通讯。
修改tux.env文件

TUXDIR=/hzh/tuxedo/tuxedo11gR1; export TUXDIR
JAVA_HOME=$TUXDIR/jre; export JAVA_HOME
JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin
PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH
LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH
LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR APPDIR=/hzh/tuxedo/simpapp; export APPDIR
TUXCONFIG=$APPDIR/tuxconfig; export TUXCONFIG
LANG=C; export LANG
WSNADDR=//192.168.0.107:3200; export WSNADDR

修改ubbsimple文件

.......................
*MACHINES
DEFAULT:
APPDIR="/hzh/tuxedo/simpapp"
TUXCONFIG="/hzh/tuxedo/simpapp/tuxconfig"
TUXDIR="/hzh/tuxedo/tuxedo11gR1"
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo" node1 LMID=simple
MAXWSCLIENTS=5
#Example:
#beatux LMID=simple *GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE *SERVERS
DEFAULT:
CLOPT="-A" simpserv SRVGRP=GROUP1 SRVID=1
WSL SRVGRP=GROUP1 SRVID=10 //增加一个WSL侦听进程
CLOPT="-A -- -n //192.168.0.107:3200" //IP地址为本机IP,端口号3200可以任意取,与tux.env 文件中的WSNADDR参数保持一致 *SERVICES
TOUPPER

[root@node1 simpapp]# tmloadcf -y ubbsimple // 编译文件
[root@node1 simpapp]# buildclient -f simpcl.c -o ws -w //重新编译客户端,ws 为编译的可执行程序,-w 参数表示客户端的编译是按照TCP/IP方式通讯的。
[root@node1 simpapp]# tmboot -y //启动进程
[root@node1 simpapp]# ./ws hello
Returned string is: HELLO
分析第二种通讯方式
我们在ubbsimple文件中配置了 WSL 参数
WSL SRVGRP=GROUP1 SRVID=10
CLOPT="-A -- -n //192.168.0.107:3200"
参数指向的IP为本机IP,在tux.env 文件中同样需要指定本机IP 。
使用tmboot -y 命令启动进程:

[root@node1 simpapp]# tmboot -y 启动进程
[root@node1 simpapp]# ps -ef 查看进程
root 3402 1 0 18:03 pts/2 00:00:00 BBL -C dom=simpapp -g 30002 -i 0
root 3403 1 0 18:03 pts/2 00:00:00 simpserv -C dom=simpapp -g 1 -i
root 3404 1 0 18:03 pts/2 00:00:00 WSL -C dom=simpapp -g 1 -i 10 -u
root 3412 2580 0 18:07 pts/2 00:00:00 ps -ef

客户端向tuxedo服务器发请求,由WSL进程处理,并返回另外一个IP及端口。客户端拿到IP及端口去访问真正的WSH进程。那为什么WSH进程为什么没有启动呢? 这是因为WSH进程是在客户端发送请求后自动生成的。
[root@node1 simpapp]# ./ws hello //向服务器端发送请求
Returned string is: HELLO

[root@node1 simpapp]# ps -ef 查看进程
root 3402 1 0 18:03 pts/2 00:00:00 BBL -C dom=simpapp -g 30002 -i 0
root 3403 1 0 18:03 pts/2 00:00:00 simpserv -C dom=simpapp -g 1 -i
root 3404 1 0 18:03 pts/2 00:00:00 WSL -C dom=simpapp -g 1 -i 10 -u
root 3421 3404 0 18:12 pts/2 00:00:00 WSH -c 11 -i 0 -s 3375121 -p 204
root 3423 2580 0 18:12 pts/2 00:00:00 ps -ef
// 这里已经生成了WSH进程

Tuxedo 通讯方式解析的更多相关文章
- 前后端常用通讯方式-- ajax 、websocket
一.前后端常用通讯方式 1. ajax 浏览器发起请求,服务器返回数据,服务器不能主动返回数据,要实现实时数据交互只能是ajax轮询(让浏览器隔个几秒就发送一次请求,然后更新客户端显示.这种方式实际 ...
- v76.01 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式 | 百篇博客分析OpenHarmony源码
百篇博客分析|本篇为:(共享内存篇) | 进程间最快通讯方式 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样 ...
- 【工业串口和网络软件通讯平台(SuperIO)教程】九.重写通讯接口函数,实现特殊通讯方式
SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1 统一的IO接口 开发一套设备驱动同时具备串口和网络通讯能力,通讯接口在逻辑上是统一的,在此基础 ...
- Angular1.x组件通讯方式总结
Angular1开发模式 这里需要将Angular1分为Angular1.5之前和Angular1.5两个不同的阶段来讲,两者虽然同属Angular1,但是在开发模式上还是有较大区别的.在Angula ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 用JAXP的dom方式解析XML文件
用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...
- Dom方式解析XML
public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...
- Linux下的Source命令及脚本的执行方式解析
Linux Source命令及脚本的执行方式解析 http://blog.csdn.net/wangyangkobe/article/details/6595143 当我修改了/etc/profile ...
- android ipc通信机制之之三,进程通讯方式。
IPC通讯方式的优缺点: IPC通讯方式的对比 名称 优点 缺点 适用场景 Bundle 简单易用 只能传输Bundle支持的数据类型 四大组件的进程通信 文件共享 简单易用 不适合高并发场景,并无法 ...
随机推荐
- Android学习笔记_55_Tween动画 (渐变、缩放、位移、旋转)
Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变).第二类就是 Frame动画,即顺序的播放事先做好的图像,与gi ...
- Vue 封装的组件生命周期钩子
export default { // ... // 在组件初始化时调用,可以简单理解为页面加载时 created () { // 存在 localStorage 的缓存内容 if (localSto ...
- 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念
1 成绩管理系统概述 1.1 管理信息系统的概念 管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...
- NEC 框架规范 animation
/* animation *//* 淡入 */.a-fadein{-webkit-animation-name:fadein;-moz-animation-name:fadein;-ms-animat ...
- 【TOJ 3660】家庭关系(hash+并查集)
描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100), ...
- DOM查询
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- linux基础指令以及权限管理
基础指令 #打印字符串 echo hello linux #将file1 和 file2粘合在一起,打印到标准输出流 cat file1 file2 标准输入输出 标准输入,stdin,即键盘.鼠标输 ...
- PHP导出数据到表格的实例
我发现最近的项目需要导出Excel表的页面非常的多,想来这个也是我们常用的功能了,现在我可以很熟练的导出了,但是记得当时自己第一次导出时还是绕了一些弯路的,那么现在我就来记录下我这次用exshop框架 ...
- Java OOP——第一章 对象和封装
1.软件出现的目的: 用计算机的语言描述现实世界 用计算机解决现实世界的问题 ◆面向对象设计和开发程序的好处: 交流更加流畅 提高设计和开发效率 计算机语言的发展向接近人的思维方式演变 ...
- ECSHOP和SHOPEX快递单号查询EMS插件V8.6专版
发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...