zoukankan      html  css  js  c++  java
  • Tuxedo 通讯方式解析(二)

     

          上一节简单介绍了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 介绍与安装(一)

  • 相关阅读:
    mysql赋权限
    MySQL Server 5.6安装
    Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
    每天一个linux命令
    解锁scott用户
    堆栈的理解
    类与对象的理解
    数组copy
    ArrayList 的代码
    intput/output 文件的复制练习
  • 原文地址:https://www.cnblogs.com/fnng/p/2912884.html
Copyright © 2011-2022 走看看