上一篇博客寫了我一些關于P2P下載以及平臺的思考,有這樣的思考,是因為我正在做一件這樣的事情。
我介紹一下我正在做的事情吧:
1、基于JXTA,我崇拜Bill Joy,學習JXTA就是因為我崇拜他,之后覺得這個技術很棒。但是JXTA存在一些用戶不友好的地方,包括JXTA的ConfigDialog和DialogAuthenticator是十分用戶不友好的,我重寫了這些部分。雖然是一些無關痛癢的地方,但是可以改變用戶體驗,提高用戶友好性。
2、簡單的插件機制,我做了一個簡單的插件系統,Application啟動之后挨個裝載服務,UI也是服務之一,UI也是基于插件的,在微內核框架流行的今天,使用一個簡單的插件機制似乎不是太好,等過一段時間之后考慮使用osgi替代之。
3、提供了兩個功能,聊天和文件共享下載。這兩個功能分別表現為兩個JXTA的Service。
4、聊天功能。目前還比較簡單,只實現了不帶格式的文本聊天,但是我隨后會加入帶格式的文本聊天,也將會加入類似騰訊QQ那樣的貼圖支持,自定義表情支持,騰訊QQ的實現很巧妙,但并不困難。四月初的版本就有可能實現之。
5、共享和下載。目前實現了文件和文件夾的共享。其中包括了高級智能錯誤檢測(AICH)等。傳輸協議參考了BT和emule的協議。在界面中還實現對DragAndDrop支持,從Windows Explore中拖一個文件到目錄共享的面板,即開始共享該文件。
6、存儲信息采用apache的Derby數據庫。我很喜歡Berkeley DB,Berkely DB高效簡潔,但是License不開放。我最終還是采用Derby了,采用Derby將會帶來一系列好處,SQL支持、JDBC支持等等,License無限制等等。擴展的應用基于其上也十分方便。由于我曾經開發過多數據庫支持引擎KSQL,在KSQL上增加支持Derby的翻譯是很容易的事情。如此一來,可能存儲引擎部分,將有可能擴展到KSQL目前所支持的多種數據庫,包括嚴格測試過的Oracle、DB2、MS SQL Server,還有經過簡單測試支持Sybase、PostgreSQL、MySQL。
7、最近的JXTA Java SE 2.5版本,使用了nio來管理連接,也就說,使用了多路復用的技術,使得每個Peer創建大量連接成為可能,例如Windows下默認最大的多路復用支持1024個連接。而Linux下,java nio是使用epoll實現的,并發性能將更好,這對于聚合點來說很重要。普通的Peer部署在Linux下可能較少,但是聚合點部署在Linux完全是可能的。
8、使用Swing做界面,使用Java 6 SE的Swing,做了系統托盤Tray的支持等等。由于Swing的UI設計工具很不穩定,最終完全手工編寫UI部分代碼,雖然辛苦,但是代碼簡潔,不同UI Designer生成的那樣。
9、我期望4月初發布一個版本,提供一個基本可用的版本。
10、我是從1月初開始學習JXTA的,到現在還不滿3個月,其中還包括過年回家休息等等,玩游戲沉迷等等,但總的來說,我對這個學習速度很滿意。不過其中感覺最爽的是,在這個過程中,編碼時,基本純鍵盤操作,不用鼠標,如行云流水一邊,十分流暢,工作效率高,人也舒服。