《用Java寫一個通用的服務器程序》01 綜述


最近一兩年用C++寫了好幾個基於TCP通信類型程序,都是寫一個小型的服務器,監聽請求,解析自定義的協議,處理請求,返回結果。每次寫新程序時都把老代碼拿來,修改一下協議解析部分和業務處理部分,然后就一個新的程序就誕生了。如此這般做了幾回,就萌生了一個想法:是不是可以做一個通用的服務器程序,每次只要實現很少的代碼就可以構建的一個新的服務器程序?

 

巧的是在用C++寫代碼的時候,我剛好碰到過一個叫做Push Framework的開源項目(在這里可以找到:www.pushframework.com),就是干這個的,功能完整,性能不錯。

因為本人主要做Java,因此就萌生了把它翻譯成Java版本的想法,這個過程可以學到兩點:

1. 服務器程序的基本架構

2. Java網絡部分的API

 

說到這個,就想起了Netty和Mina,就提供這種類型的功能,而且還提供異步I/O。除了這兩個著名的項目,我還發現Java世界里有類似功能的項目還有一些:

1. Grizzly (https://grizzly.java.net/): 從GlassFish服務器程序中分離出來的,用Java NIO實現。

2. IoServer (https://code.google.com/p/ioserver/): 國人的項目,號稱比Mina更輕量級,專注於手游方面的服務器。

3. Quick Server (http://www.quickserver.org/): 基於TCP,同樣是只需要專注於協議和處理邏輯。

 

看到有不少類似的項目,啥逼格都沒有了,那就純屬基礎學習吧。這里貼一下自己的這個項目的地址:Java Push Framework (https://github.com/wanly3643/Java-Push-Framework/)。目前一個能運行的版本已經提交上去了,有興趣的朋友可以拿去看看,文檔正在抓緊寫。

 

翻譯成Java版本之后,根據自己的理解畫了一個服務器程序的簡單架構圖:

 

 

第一行表示新的客戶端到達時的處理邏輯,第二三行表示有新的請求到達時的處理邏輯。

一個服務器應該提供一個監視服務,提供一個監聽服務端口獲取服務器的運行狀態。因為對於監視請求的處理和普通客戶端很類似,因此可以和普通客戶端一起處理。

此外對於服務器來說,還需要包含廣播功能,這就需要一個廣播管理模塊,廣播消息隊列以及廣播消息發送模塊。

 

其實,做這個通用的服務器框架只是第一步,后面還打算自己實現HTTP協議,然后再實現servlet容器,這樣就能出來一個小的tomcat了。

這是一條線,還有一條線就是研究服務器程序性能方面的研究。

 

開篇就寫這么多,后面會按照模塊來分析,寫一些思路和實現代碼時遇到的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM