H2数据库研究-TCP服务器(二)

  今天回到家已经22点了,虽然有点晚,但是今天还是必须坚持,因为我知道大多数计划都是因为某些特殊情况耽误,就一直放弃了,所以我必须坚持下去,不能找任何理由。

  继续研究TCP服务器的内容,Tcp服务器主要跟Server, TcpServer和TcpServerThread这几个类有关系,Tcp服务器的序列图如下所示:


  其中Server是管理所有服务器的服务器,接收用户对各种服务器的开启,关闭等操作。TcpServer是H2数据库的Tcp服务器。TcpServerThread是TcpServer在

处理多个连接请求开启的线程。其中TcpServer在处理连接请求时候,又会创建一个org.h2.value.Transfer类的对象。

  我觉得org.h2.value.Transfer的设计有些问题。在调用它进行处理的时候,需要进行很多步骤,这样的对外接口不是太简洁,不利用其它类调用使用它的方法。

 

 

transfer = new Transfer(null);

transfer.setSocket(socket);

transfer.init();

使用它的方法需要这么多步骤,如果不熟悉API的程序员在使用它的时候就很容易出错,我觉得这个类设计的不是太合理。

Transfer类的构造函数完全可以这么写:

 

public Transfer(SessionInterface session, Socket socket) {

        this.session = session;

init();

 }

 这样调用的时候直接transfer = new Transfer(socket);,然后就可以直接调用transfer的其它方法。

 经过阅读可知道Transfer类中的方法均是对DataInputStream,DataOutputStream两个输入输出流中的方法进行一些必要的封装,并且添加了一些新的方法。

如writeValue和ReadValue是直接读写Value对象的方法。

 然后开始读取客户端的连接信息,如数据库版本,数据库名称,用户名,密码等等信息。

 再调用Engine engine = Engine.getInstance();得到Engine对象,Engine使用了单例模式,而且是线程安全的。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值