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使用了單例模式,而且是線程安全的。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章