Skip to content

db服务器端 连接处理方式

nixub edited this page Sep 13, 2024 · 2 revisions
TcpServerThread(这是一个任务,还是得靠TcpServer的listen 方法来监听启动线程来执行任务) 的run方法里 session=Engine.createSession(ci); 引擎(单例)的openSession() 打开一个数据库连接,
并新建一个databse对象,数据库对象初始化时, 会创建一个服务端并开启,单例(session=openSession(ci,ifExists,forbidCreation,cipher);  database=newDatabase(ci,cipher);)
, 当用户鉴权后 ,就会创建一个  SessionLocal对象


外部客户端通过 这个触发 连接
Connectionconn=org.h2.Driver.load().connect(url,p))
JdbcConnection
JdbcConnection(url,info,null,null,false);
SessionRemote
//this will return an embeddedorserverconnection这将返回一个嵌入式或服务器连接
session=new SessionRemote(ci).connectEmbeddedOrServer(false);
打开一个数据库连接通过给定的连接信息
returnEngine.createSession(ci);

这里会解析并准备给定的SQL语句。
SessionLocalsession=openSession(ci);

这一步会进行鉴权
session=openSession(ci,ifExists,forbidCreation,cipher);
// 这才是真的得到session了
//数据库的初始化
database=newDatabase(ci,cipher);

SessionLocalsession=database.createSession(user,ci.getNetworkConnectionInfo());


启动服务端 (启动服务器 需要很多参数 dbsetting)
Server
Serverserver=newServer();
TcpServerservice=newTcpServer();
TcpServer
TcpServerThreadc=newTcpServerThread(s,this,id);