1 在数据库监听未启动时
目标端口未监听,会返回RST(Reset)报文,客户端会立即感知连接失败(无重传机制)。此时延迟主要由网络往返时间(RTT)决定,通常为几毫秒到几百毫秒。
2 在建立socket连接时
LOGINTIMEOUT 参数生效,该参数为socket超时参数,单位毫秒
java
Socket var5 = new Socket();
if (var3 > 0) {
var5.connect(var4, var3);
} else {
var5.connect(var4);
}
3 客户端的连接检测机制
IFX_SOC_KEEPALIVE 参数生效
在配置后,使用操作系统 net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes 参数进行tcp keepalive 检测
4 数据库端连接监测机制
数据库端无需配置,会按照上述三个参数进行连接检测,若net.ipv4.tcp_keepalive_time 为0 则默认30s
5 执行sql超时或者断网等情况
IFX_SOC_TIMEOUT 参数生效 单位 毫秒
6 登录信息验证超时检测
GBASEDBTCONTIME 参数生效,单位 毫秒
java
this.sendConnectionRequest(var1, var2, var3, var4, var5, var6, var7);
if (this.conTime > 0) {
try {
int var17;
if (!this.SSLconnection) {
var17 = this.asfSocket.getSoTimeout();
this.asfSocket.setSoTimeout(this.conTime * 1000);
this.recvConnectionResponse();
this.asfSocket.setSoTimeout(var17);
} else {
var17 = this.asfSSLSocket.getSoTimeout();
this.asfSSLSocket.setSoTimeout(this.conTime * 1000);
this.recvConnectionResponse();
this.asfSSLSocket.setSoTimeout(var17);
}
} catch (Exception var15) {
this.disconnect();
throw var15;
}
} else {
this.recvConnectionResponse();
}
测试程序如下
java
import com.gbasedbt.jdbc.IfxSqliConnect;
import java.sql.*;
import java.util.Properties;
public class test {
static {
try {
Class<?> aclass = Class.forName("com.gbasedbt.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String sql="select vtime(1) from dual;";
Properties properties= new Properties();
properties.setProperty("DATABASE","xms");
properties.setProperty("GBASEDBTSERVER","gbase171");
properties.setProperty("CONNECTIONCLASS","com.gbasedbt.jdbc.IfxSqliConnect");
properties.setProperty("PROTOCOLCLASS","com.gbasedbt.jdbc.IfxSqli");
properties.setProperty("USER","gbasedbt");
properties.setProperty("DB_LOCALE","zh_CN.utf8");
properties.setProperty("USERURL","jdbc:gbasedbt-sqli://172.16.39.171:9099/xms:GBASEDBTSERVER=gbase171;DB_LOCALE=zh_CN.utf8;IFX_SOC_TIMEOUT=3000000;");
properties.setProperty("PASSWORD","Ootr123!");
properties.setProperty("LOGINTIMEOUT","500000");
properties.setProperty("IFX_SOC_TIMEOUT","300000");
properties.setProperty("GBASEDBTCONTIME","200000");
//properties.setProperty("PROTOCOLTRACEFILE","/home/gbasedbt/xx.log");
//properties.setProperty("PROTOCOLTRACE","5");
IfxSqliConnect connection= null;
long currentTimeMillis = System.currentTimeMillis();
System.out.println("建立连接时间"+currentTimeMillis);
try {
connection = new IfxSqliConnect("gbasedbt","Ootr123!","172.16.39.171:9099",properties);
if(connection!=null){
System.out.println("连接成功");
}
PreparedStatement statement= connection.prepareStatement(sql);
statement.executeQuery();
statement.close();
connection.close();
long currentTimeMillis1 = System.currentTimeMillis();
System.out.println("执行sql成功耗时"+(currentTimeMillis1-currentTimeMillis));
} catch (SQLException e) {
long currentTimeMillis1 = System.currentTimeMillis();
System.out.println("获取连接失败,耗时"+(currentTimeMillis1-currentTimeMillis));
e.printStackTrace();
}
}
}