GBase客户端与服务器的通信支持多种不同的方式:共享内存 Shared memory、Stream pipe、 TCP/IP(Sockets、TLI)、IPX/SPX、DRDA。我们通常选择TCP/IP协议来实现客户端与服务器之间的进程通信。
客户端与服务器之间的进程若要进行通信,那么首先必须解决的问题是如何标识进程。在本地我们可以通过进程的PID来唯一标识一个进程,可是在不同主机之间通信时这个办法就行不通了。TCP/IP协议解决的便是这个问题。网络层的IP地址唯一标识了一台主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket。
GBase 8s通过poll线程提供实时的客户端的连接请求和通信服务,初次建立连接时需要listener thread 来建立客户端与服务器的连接。GBase 8s客户端与服务器之间新建立连接过程如下。
1.客户端发起新连接请求,Poll线程实时接收连接请求信息(服务名、用户名、密码等信息)
2.将新连接请求转交给listener线程处理
3.listener线程验证请求信息是否有效,若有效,则为连接创建一个sqlexec线程
4.sqlexec线程直接与客户端连接
已有连接的通信过程如下。
1.当连接建立后,客户端发出执行任务(SQL语句)的请求,通信信息通过poll线程转发给sqlexec线程处理
2.poll线程转发给sqlexec线程处理
3.sqlexec进程处理完成后,返回给客户端
4.后续客户端任务重复前三个过程
通过onstat -g ath命令可以监控通信服务线程的运行情况,其中poll线程一直处于running状态,即时响应客户端请求,listener线程一般处于sleeping状态,在新建连接请求时由poll线程触发运行:
onstat -g ath
Theads:
tid | tcb | rstcb | prty | status | vp-class | name |
1 | 9ae15418 | 0 | 1 | running | 12soc* | soctcppoll |
2 | 9ae159e8 | 0 | 1 | running | 13soc* | soctcppoll |
3 | 9aed4b08 | 0 | 1 | sleeping forever | 3cpu* | soctcplst |
4 | 9ae65808 | 0 | 2 | sleeping forever | 1cpu* | soctcplst |
5 | 9ae4c028 | 0 | 2 | sleeping secs:1 | 2cpu | sm_poll |