「wsl运行java」wsl运行docker

博主:adminadmin 2023-03-19 20:22:09 271

本篇文章给大家谈谈wsl运行java,以及wsl运行docker对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

简单比较几种常用的中间件产品的通信机制(基于TCP/IP)求解

由于应用范围和产品历史不同,这些通信子系统也就千差万别。关于几种常用的中间件产品,比如IBM MQSeries,CICS/TXSeries和BEA Tuxedo的通信机制,是经常被软件工程师们讨论的话题,因为许多产品特性都是与此息息相关的。我这里仅仅粗浅地介绍一下最表层的一些架构,希望能够抛砖引玉。首先,我想对比一下数据传输类中间件MQSeries与TPM类交易中间件CICS/TXSeries和BEA Tuxedo。MQSeries与CICS/TXSeries或BEA Tuxedo有很大的不同,因为MQSeries被设计为一个以异步数据通信为基础的中间件。MQSeries这类中间件的特点是“存储/转发”(对持久消息,直接保存到硬盘;对非持久消息,开始时先保存到共享内存),而TPM中间件(包括TXSeries和Tuxedo)没有这个“存储”的功能,而侧重分布式的实时交易处理。数据传输类中间件MQSeries适于以下的应用场合:数据跨异种系统的可靠传输。 高速地传送数据或请求,接收方一般不会因为工作量大而导致溢出或丢弃。

这是因为数据传输中间件系统的接收器快速存储收到的数据而不急于进行处理和响应。 消耗时间长的交易,或消耗时间长短不定的交易,或者是批处理作业。

服务程序(MQ守护程序)可以高效率的执行批量交易和长时间交易,而完全不用考虑通信等待的问题,通信由相关的队列、通道和收听器来维护。 工作量按时间分布不均匀的服务器系统。

服务程序可以充分利用系统空闲的时间(比如夜间)工作。 分布式的复杂系统

分布式的复杂系统存在各种各样的意外事件和复杂情况,如果全部采用同步系统,一个工作点的失败可以导致整个系统的瘫痪。异步和“存储/转发”是解决相互等待的最佳途径。 相对数据传输中间件MQSeries,TPM类交易中间件(CICS/TXSeries和BEA Tuxedo)有以下的优势:针对高速且有返回信息的交易,有极快的响应速度。 强大的分布式事务处理的能力。

MQSeries也支持两阶段提交,但异步的性质决定了它不能支持分布式应用的统一交易处理。 完全屏蔽了通信层的工作,使开发更加简便,专注于业务系统。 MQSeries的通信机制的核心是通道和收听器。通道设置决定了通信的协议、参数和相关方法。MQSeries的收听器有两种机制:基于inetd的守护进程机制(amqcrsta),和基于线程响应的机制(runmqlsr)。这两种机制各有优缺点。runmqlsr的性能更出色,但老版本的MQSeries在接收过多的连接时有一些问题。amqcrsta能支持更多的通道和客户访问,但可能造成系统资源更多的损耗。MQSeries v5.3以后,runmqlsr已经得增强,我个人认为这种方式更好。当然,无论如何,要接受更多客户机或通道的访问,必须调整qm.ini或Windows注册表的一些参数(MaxChannels, MaxActiveChannels, ListenerBacklog),以及一些相关的操作系统的内核参数。以客户机访问方式为例,MQSeries的每个客户机都与收听器(amqcrsta或runmqlsr)建立Socket连接,而MQSeries收听器通过IPC机制通知Queue Manager Agent (amqzlaa0)读写消息和队列。客户机访问方式采用的是短连接,而通道连接方式采用的是长连接。关于短连接和长连接的比较,后面还要加以讨论。CICS/TXSeries的通信处理与MQSeries的通道连接方式类似,使用长连接的方式。CICS/TXSeries的TCP/IP收听器进程叫做cicsip,在v5.1以后,其功能大大增强。CICS/TXSeries使用一个LD:TCPProcessCount参数,其内部是用了Socket的SO_REUSEADDR选项,支持多个收听器进程是用相同的IP和端口。这个特性大大简化了多并发情况的客户机设置,可以采用相同的服务器收听器设置。当然这种特性会增加服务器收听器的设计难度。cicsip进程将请求写入请求队列,实际上是写入Region Pool中的共享内存。而每个应用服务器进程(cicsas)通过IPC机制读取请求,经过计算,返回信息到共享内存中的应答队列,再通过收听器返回客户机。可以看出,CICS/TXSeries在内部使用了一个异步处理的方式,其目的是充分利用系统资源,达到最高的吞吐效率。但对外仍然是一个同步通信的系统。但是与MQSeries不同,CICS/TXSeries没有任何存储数据或请求的操作,队列的容量和数据的生存期也远远小于MQSeries。在这些方面,CICS/TXSeries与Tuxedo没有什么不同。但Tuxedo的通信机制还是有很多不同于CICS/TXSeries的方面:CICS/TXSeries的通信设置很简单,只须设置一个收听器IP和端口就可以了。Tuxedo的通信设置可就多了,本地语言(C, COBOL等)客户访问(WSL),Java Jolt访问(JSL),域连接(T/DOMAIN),集群等等都需要独立的网络设置,使用独立的收听器。而且还有很多看不见的端口被作为客户连接使用(WSH),网络管理员在配置防火墙时要颇费一番脑筋。 Tuxedo使用短连接的方式,与MQSeries的客户机访问方式相似,但通信方式要复杂一些。以本地语言客户访问的收听器WSL为例:WSL在接收到客户请求后,立即释放连接,而客户机接着使用新建的连接与一个WSH进程继续通信。这种方式可以降低WSL的工作量。 Tuxedo的客户机程序直接与收听器建立Socket连接。CICS/TXSeries的客户机程序通过IPC与一个客户机守护程序(cclclnt)通信,该守护程序(cclclnt)与CICS/TXSeries的服务器建立一个Socket连接。 目前MQSeries和Tuxedo的收听器还不支持复用IP地址和端口,所以如果有太多的客户访问或通道连接,需要增加新的收听器端口。从上面的讨论可以看出:MQSeries的通道连接方式以及CICS/TXSeries采用长连接的通信方式,MQSeries的客户机访问方式以及Tuxedo采用短连接的通信方式。所谓长连接,就是一旦建立连接,一般的应用API不会中断该连接;所谓短连接,就是在一个完整的应用中先建立连接,最后结束该连接,而且程序退出时必然切断连接。这两种通信方式对应用系统有着深刻的影响。短连接灵活方便,避免了下述很多长连接面临的棘手的问题:客户机异常中断,网络中断,包括Windows 9x之类的操作系统正常关闭,都不会通知服务器,造成服务器保持闲置无用的连接,长连接通常要等待“tcp_keepidle”之类的时间,这个时间默认时一般是两个小时。这样会明显加重服务器的负载,无故占用相应的资源。MQSeries采用DISCINT和HBINT等通道参数来避免这个问题。 如果仅仅是少量访问,建立长连接浪费过多的资源。MQSeries也是通过DISCINT和HBINT等通道参数来避免这个问题。 网络相关的故障仅仅影响本次连接。短连接可以隔离故障的影响。

an error has occurred.see the log file

这个是jdk版本过高导致的。建议降低版本后再试。

cmd命令行进入eclipse.exe所在目录,执行下述命令:eclipse.exe -clean再启动eclipse试试,如果还不行,看看报错的那个日志文件。

scoop install dark安装失败?

1 概述

作为一名使用 win10 的开发者,搭建开发环境往往是一件比较痛苦的事,需要从网上下载各种软件,在电脑上配置不同软件运行环境,对软件进行各种设置,不仅耗时,而且容易出现各种问题。搭建的环境还会存在下面一些问题:

安装大量程序造成路径污染。安装和卸载比较麻烦。开发环境不能迁移,重装系统或者换电脑需要重新搭建开发环境。软件版本不好控制。为了解决上面这些问题,我们可以使用 WSL+Docker+Scoop 搭建开发环境,取代通过图形界面安装软件和 VMware 安装 Linux 环境的传统方式。

WSL 是适用于 Linux 的 Windows 子系统, 可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。

Scoop 是 Windows 的命令行安装程序,可以让我们从命令行以最小的安装量安装程序, 它消除了安装界面和安装程序造成的路径污染,它安装和卸载软件只需一行命令就可以完成,它还可以随意切换软件的版本。

一个完整的开发环境组成:首先使用 WSL 搭建一个 Linux 环境,然后在 Linux 环境里安装 Docker 应用,使用 Docker 来安装一些常用软件,比如数据库、web 环境等,Scoop 则是在本机上安装一些开发用到的软件,比如 jdk、maven、idea 等。WSL 和 Scoop 都是比较容易备份和还原的,这两个搭建好了,我们利用备份还原可以快速在另一台机器上搭建同样的一套环境,下面是搭建环境的具体流程。

2 WSL

2.1 WSL 安装

使用 WINDOWS 键 + R,输入 winver,检查 win10 版本,确保内部版本号是 18362.1049 以上,否则更新 win10 到最新版本。

图片

2. 以管理员身份打开 PowerShell 并运行下面命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

图片

3. 重新启动计算机。

4. 下载 Linux内核更新包[1],然后安装。

5. 将 wsl2 设置为默认版本, 以管理员身份打开 PowerShell 并运行下面命令:

wsl --set-default-version 2

图片

6. 安装 Ubuntu 20.04 LTS, 打开 Microsoft Store[2],搜索 Ubuntu 20.04 LTS[3] 安装, 安装完成后打开 Ubuntu 20.04 LTS, 等候几分钟会提示设置用户名和密码,如果不设置用户名和密码直接关闭窗口则默认以 root 登录,这里我们直接关闭窗口,不设置用户名和密码。

图片

7. 然后重新打开 Ubuntu 20.04 LTS 就会进入 Ubuntu 20.04 LTS了,我们也可以在 powershell 使用 wsl 这个命令进入 Ubuntu 20.04 LTS。

2.2 WSL 配置

WSL 每次启动后,windows 都会给它分配一个随机的 IP 地址,这样是不利于我们访问 docker 里的服务的,为了解决这个问题,我们可以创建一个脚本文件 wsl2-ip.bat来给 wsl 分配一个固定的 IP,在每次启动 wsl 后用管理员权限运行这个脚本,文件内容如下:

@echo off

setlocal enabledelayedexpansion

:: set wsl2 ip

wsl -u root ip addr | findstr "192.168.169.2" nul

if !errorlevel! equ 0 (

echo wsl ip has set

) else (

wsl -d Ubuntu-20.04 -u root ip addr add 192.168.169.2/28 broadcast 192.168.169.15 dev eth0 label eth0:1

echo set wsl ip success: 192.168.169.2

)

:: set windows ip

ipconfig | findstr "192.168.169.1" nul

if !errorlevel! equ 0 (

echo windows ip has set

) else (

netsh interface ip add address "vEthernet (WSL)" 192.168.169.1 255.255.255.240

echo set windows ip success: 192.168.169.1

)

pause

其中 192.168.169.2 表示 Linux 的 IP 地址, 192.168.169.1 表示主机的 IP 地址。

有时会遇到 Ubuntu 20.04 LTS 无法连接网络,这个非常重要,我们可以运行下面命令解决:

sed -i '4d' /etc/resolv.conf

sed -i '3a\nameserver 8.8.8.8' /etc/resolv.conf

sed -i '4a\nameserver 114.114.114.114' /etc/resolv.conf

2.3 Ubuntu 配置

2.3.1 替换镜像源

1. 备份 sources.list 文件,运行下面命令:

mv /etc/apt/sources.list /etc/apt/sources.list.bak

2. 创建 source.list 文件,运行下面命令:vim /etc/apt/sources.list

3. 然后在文件里添加下面内容,下面源任选其一即可。

# 清华源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释

deb focal main restricted universe multiverse

# deb-src focal main restricted universe multiverse

deb focal-updates main restricted universe multiverse

# deb-src focal-updates main restricted universe multiverse

deb focal-backports main restricted universe multiverse

# deb-src focal-backports main restricted universe multiverse

deb focal-security main restricted universe multiverse

# deb-src focal-security main restricted universe multiverse

# 预发布软件源,不建议启用

# deb focal-proposed main restricted universe multiverse

# deb-src focal-proposed main restricted universe multiverse

# 阿里源

deb focal main restricted universe multiverse

#deb-src focal main restricted universe multiverse

deb focal-security main restricted universe multiverse

#deb-src focal-security main restricted universe multiverse

deb focal-updates main restricted universe multiverse

#deb-src focal-updates main restricted universe multiverse

deb focal-proposed main restricted universe multiverse

#deb-src focal-proposed main restricted universe multiverse

deb focal-backports main restricted universe multiverse

#deb-src focal-backports main restricted universe multiverse

# 中科大源

deb focal main restricted universe multiverse

#deb-src focal main restricted universe multiverse

deb focal-updates main restricted universe multiverse

#deb-src focal-updates main restricted universe multiverse

deb focal-backports main restricted universe multiverse

#deb-src focal-backports main restricted universe multiverse

deb focal-security main restricted universe multiverse

#deb-src focal-security main restricted universe multiverse

deb focal-proposed main restricted universe multiverse

#deb-src focal-proposed main restricted universe multiverse

#网易163源

deb focal main restricted universe multiverse

deb focal-security main restricted universe multiverse

deb focal-updates main restricted universe multiverse

deb focal-proposed main restricted universe multiverse

deb focal-backports main restricted universe multiverse

#deb-src focal main restricted universe multiverse

#deb-src focal-security main restricted universe multiverse

#deb-src focal-updates main restricted universe multiverse

#deb-src focal-proposed main restricted universe multiverse

#deb-src focal-backports main restricted universe multiverse

4. 进行更新,运行下面命令:

apt update

apt upgrade -y

2.3.2 开启 systemctl

安装 daemonize 和fontconfig 软件,运行下面命令:apt install -y fontconfig daemonize

2. 运行 vim /etc/profile 命令,在末尾添加下面内容:

SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

if [ -z "$SYSTEMD_PID" ]; then

sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

fi

if [ -n "$SYSTEMD_PID" ] [ "$SYSTEMD_PID" != "1" ]; then

exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME

fi

3. 运行 vim /etc/sudoers 命令,在末尾添加下面内容:

%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*

4. 刷新 profile 文件,运行下面命令:

source /etc/profile

2.3.2 开启 ssh

设置 root 账号的密码,用作后续登陆使用,运行下面命令:passwd root

图片

2. 备份原始的 sshd_config,运行下面命令:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

3. 修改 sshd_config 文件,运行下面命令:

sed -i '15c Port 22' /etc/ssh/sshd_config

sed -i '17c ListenAddress 0.0.0.0' /etc/ssh/sshd_config

sed -i '34c PermitRootLogin yes' /etc/ssh/sshd_config

sed -i '58c PasswordAuthentication yes' /etc/ssh/sshd_config

4. 重启 sshd,运行下面命令

systemctl restart sshd

2.4 Docker 安装与配置

官方和阿里的源选择其一,建议使用阿里源,速度快。

2.4.1 官方安装

1. 卸载旧版本,运行下面命令:

apt-get remove docker docker-engine docker.io containerd runc

2. 更新 apt 软件包索引并安装软件包以允许 apt 通过 HTTPS 使用存储库,运行下面命令:

apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

3. 添加 Docker 的官方 GPG 密钥,运行下面命令:

curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 设置稳定的存储库,运行下面命令:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list /dev/null

5. 安装最新版本的 Docker Engine 和容器,运行下面命令:

apt-get update

apt-get install -y docker-ce docker-ce-cli containerd.io

apt-mark hold docker-ce docker-ce-cli containerd.io

2.4.2 阿里源安装

卸载旧版本,运行下面命令:apt-get remove docker docker-engine docker.io containerd runc

2. 更新 apt 软件包索引并安装软件包以允许 apt 通过 HTTPS 使用存储库,运行下面命令:

apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

3. 添加 Docker 的阿里 GPG 密钥,运行下面命令:

curl -fsSL | sudo apt-key add -

4. 设置稳定的存储库,运行下面命令:

add-apt-repository "deb [arch=amd64] $(lsb_release -cs) stable"

5. 安装最新版本的 Docker Engine 和容器,运行下面命令:

apt-get update

apt-get install -y docker-ce docker-ce-cli containerd.io

apt-mark hold docker-ce docker-ce-cli containerd.io

2.4.3 配置镜像加速

创建 /etc/docker/daemon.json 文件,并填写以下内容:

{

"registry-mirrors": [""]

}

3 Scoop

3.1 Scoop 安装

1. 以管理员权限打开 PowerShell 。

2. 自定义用户软件和全局软件安装位置,运行下面命令:

$env:SCOOP='D:\Softwares\Scoop\LocalApps'

[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')

$env:SCOOP_GLOBAL='D:\Softwares\Scoop\GlobalApps'

[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')

图片

3. 配置安全策略以及安装 Scoop,运行下面命令:

Set-ExecutionPolicy RemoteSigned -scope CurrentUser

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('')

图片

3.2 安装失败解决方案如果发生下面错误,这是因为网络原因无法访问 GitHub。

图片

2. 访问 IP地址查询网站[4],输入raw.githubusercontent.com域名,查询对应的 IP 地址。

图片

3. 配置 C:\Windows\System32\drivers\etc\hosts文件,在修改前赋予 hosts 文件读写权限。

图片

图片

图片

4. 修改 host 文件内容如下,第一列是查询出来的ip地址,第二列是其对应的域名,中间有个空格。

图片

5. 保存后重新运行安装命令。

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('')

3.3 Scoop 配置

安装 Scoop 运行所需要的基础软件:scoop install sudo

sudo scoop install 7zip git innounp dark -g

图片

2. 运行下面命令,检查Scoop还存在的问题,输入提示运行的命令,来解决存在的问题,如果你使用的安装路径不是我的路径,请修改命令中的软件安装位置:

scoop checkup

Add-MpPreference -ExclusionPath 'D:\Softwares\Scoop\LocalApps'

Add-MpPreference -ExclusionPath 'D:\Softwares\Scoop\GlobalApps'

Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1

图片

3. 配置软件仓库,官方软件仓库目前收录的软件很少,不足以支持我们的使用,添加下面的软件仓库,能让我们安装更多的软件:

scoop bucket add extras

scoop bucket add versions

scoop bucket add nightlies

scoop bucket add nirsoft

scoop bucket add php

scoop bucket add nerd-fonts

scoop bucket add nonportable

scoop bucket add java

scoop bucket add games

scoop bucket add jetbrains

scoop bucket add dorado

scoop bucket add Ash258

scoop bucket add pleiades

scoop bucket add Scoop-Apps

scoop bucket add scoop-zapps

scoop bucket add lemon

scoop bucket add raresoft

图片

4. 如果软件仓库添加失败,还是因为网络的原因,大家可以把这些仓库 fork 到自己的码云账户下,然后再添加。

5. 使用 aria2 来加速软件的安装:

scoop install aria2 -g

scoop config aria2-max-connection-per-server 16

scoop config aria2-split 16

scoop config aria2-min-split-size 1M

如果想关闭 aria2,可以运行 scoop config aria2-enabled false命令。

3.4 Scoop 常用命令

# 搜索app

scoop search 应用名

# 检查哪些软件有更新

scoop status

# 版本切换

scoop reset 应用名@版本切换

# 禁止某app更新

scoop hold 应用名

# 更新所有app

scoop update *

# 安装app

scoop install 应用名

#全局安装app

scoop install -g 应用名

#安装extras软件源下的app

scoop install extras/应用名

# 卸载app

scoop uninstall 应用名

# 卸载全局安装的app

scoop uninstall -g 应用名

4 总结

开发环境软件的安装与配置到这里就完成了,利用上面这些软件,你可以快速搭建 Java、Go、C++、Python等开发环境。

参考资料

[1]Linux内核更新包:

[2]Microsoft Store:

[3]Ubuntu 20.04 LTS:

[4]IP地址查询网站:

安装好java1.7解压好的eclipse,无法进入eclipse,会报一大串错 怎么解决啊

首先,编程需要Java的JDK 1.7,仅JRE7是不够的

其次,eclipse最新稳定版3.7只是勉强兼容Java 7环境。要等3.8正式版发布后才完全兼容Java 7.

现在3.8出于最后测试阶段,还没有发布。

3.7版本以下的3.6, 3.5等版本是不兼容Java 7环境的,楼主的错误很可能是因为eclipse版本太低(稍低都不行)。

建议如果要用Java 7就必须用eclipse最新的3.7以上版本。

或者退回Java 6就可以使用eclipse的大部分各种版本。

TUXEDO调服务时,客户端返回tpcall错误:tpforward tpacall failure TPENOENT - no entry found。

Tuxedo介绍 原创

2016-04-02 21:23:02

11点赞

waterxcfg304

码龄14年

关注

1、Tuxedo介绍

Tuxedo 是什么?

Tuxedo是BEA公司(现已被Oracle公司收购)的一个客户机/服务器的“中间件”产品,它在客户机和服务器之间进行调节,以保证正确地处理事务。它用C语言技术开发的并且有很高性能。

TUXEDO是在、Internet 这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。

Tuxedo 的主要作用是:

屏蔽分布式环境中各种通信协议、硬件体系结构、操作系统、数据库和其它应用服务等方面的差异,使分布于网络节点上的应用程序的各个单元部件之间能够进行互操作,并协调操作的一致性和完整性,最大限度地节省系统资源,提高系统性能。

* Tuxedo 已经广泛地应用于金融、电信、制造业等各行各业的核心业务系统。

三层架构

从左边往右依次为:客户端层(表现层),中间件服务层(业务逻辑层),数据库服务器层(数据层)。这种典型的三层架构应用非常广泛。对于应用weblogic中间件的系统一般采用的B/S架构,绝大部分采用HTTP协议,少量的系统用java编写的客户端,使用的是RMI 协议,或J2EE里的其它协议。

对于tuxedo中间件使用的是tuxedo协议,前端开发工具可以是各式各样,VC++ 、java 、Delphi 、VB 等。

Tuxedo 的通讯过程

Tuxedo 服务器处理请求的方式与apache有本质的区别。

Apache服务器处理请求,由客户端发出请求到服务器,由服务器对请求进行处理后将数据返回给客户端。

Tuxedo 服务器一次请求需要两次进行两次交互,Tuxedo有两个负责通讯的进程,一个为WSL,WSL的数量可以进行配置,典型的配置一般两、三个;WSH可以有N多个。客户端通过IP地址和端口号与WSL建立连接,由WSL认证请求是否合法,在WSL的响应中包含了另外一个IP地址和端口号;然后,客户端通过拿到的新的IP地址和端口号去请求WSH 。

客户端程序由GUI 与 Tuxeo通讯两部分组成,GUI部分主要由开发人员关心如何设计,通讯部分可能设计成几个函数供开发人员调用。对于性能测试人员可能更关心客户端与服务器之间的通讯过程。

2、tuxedo相关概念

IPC: Inter-Process Communication 进程间通信: 管道、信号量(semaphore)、共享内存(shared memory)、消息队列(Message Queue)。

管道是UNIX系统IPC的最古老形式,数据只能单向流动。

Tuxedo在客户机和服务器通信中大量使用UNIX系统的消息队列。

SSSO(Single Server Single Queue)模式:每个客户机都有一个响应队列来接受客户端请求。

MSSO(Multiple Server Single Queue)模式:多个服务器共享同一个请求队列。

信号量包含一个计数器,表示某个资源正在被访问和访问的次数,用来控制多线程对共享数据的访问。

Tuxedo使用共享内存存储公告牌,用来公告进程状态信息和需要在进程间共享或传递的数据。

-------------------------------------------------------------

Tuxedo的配置文件称为UBBCONFIG或ubb,包含了域(Domain)、逻辑机器(Machine)、服务器组(Group)、服务进程(Server)、服务(Service)的定义。运行前,需要把UBBCONFIG装载成二进制文件,称为TUXCONFIG。

Tuxedo服务启动时,执行tpsvrinit()函数,可以打开一些如数据库之类的资源供以后使用

Tuxedo服务停止时,执行tpsvrdown()函数,关闭资源

服务程序调用tpreturn()函数来结束服务请求,并返回一个缓冲区,必要时,将它传给客户程序。

--------------------------------------------------------

ATMI环境支持的C/S通信方式:请求/应答式通信、回话通信、队列通信、事件代理通信、消息通知

请求/应答式通信:同步调用(tpcall)、异步调用(tpacall)、嵌套调用、转发调用(tpforward)

转发调用和嵌套调用类似,不同的是最里层的嵌套服务可以直接给客户程序一个响应,而不必按照调用栈 逐级返回。

回话方式:tpsend()/tprecv() 基于事件,分通告和代理

void (**p)(): 定义了一个指向函数指针的指针p

tpsetunsol(p) : 将p指向的函数func设置为客户机的事件处理器。

tpchkunsol(): 检查意外事件

事件代理: tppost()/tpsubscribe() 消息发布/订阅

Tuxedo提供了两个事件代理器(TMUSREVT TMSYSEVT)来处理订阅请求。

队列存储: tpenqueue() / tpdequeue()

Tuxedo/Q用到了Tuxedo提供的两个服务器:消息队列服务器(TMQUEUE)和消息转发服务器(TMQFORWARD)

---------------------------

多系统多机之间通信需要每台机器上都有一个Bridge进程,通过TCP/IP通信,Bridge进程维持一个长连接,一旦建立不会断掉。

TUXEDO应用系统的客户端访问TUXEDO服务器上的服务的过程图:

说明:

WS(Workstation Extension Product)用于指TUXEDO产品的客户端部分

WSC Workstation Client

WSL(Workstation Listener) TUXEDO系统自带的一个SERVER,它侦听一个指定的端口,WSC最初与该SERVER建立连接

WSH(Workstation Handler)TUXEDO系统自带的一个SERVER,由它处理WSC与TUXEDO SERVER之间的通讯。

Bulletin Board(公告板)TUXEDO把系统的配置保存在一个共享内存中,该共享内存称为公告板(BB)

BBL 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()调用返回。

----------------------------------------------------------

单域模式Single-Domain Model。单机模式 Single Host Model, 多机模式Multi-Processor Model

多域模式Multi-Domain Model

wsl运行java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于wsl运行docker、wsl运行java的信息别忘了在本站进行查找喔。