<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java究竟怎么玩?

      天地程序已定棋,人間大數待變局

        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理

       中午吃飯時大略分析了一下Douyu的業務實現過程,趁著沒人偶趕緊發上來……由于該平臺尚未開源,分析可能存在某種程度的誤差,對與不對有賴讀者自辨……


      咳, 經過一段相當漫長的鉆研,偶得出如下結論:

       

      就目前所見,Douyu項目由com.douyu.config,com.douyu.engine,com.douyu.engine.core,com.douyu.engine.db,com.douyu.engine.dialect,com.douyu.engine.http,com.douyu.engine.http.buf,com.douyu.engine.http.fileupload,com.douyu.engine.http.session,com.douyu.engine.http.util,com.douyu.engine.log,com.douyu.engine.util,com.douyu.http(不理解為什么不同com.douyu.engine.http寫一起……),com.douyu.main,com.douyu.security,com.douyu.sql,com.douyu.tree,com.douyu.util等包組成。

      由于重寫了javac的部分java編碼,Douyu可以“表面上”直接讀取Java文件,也就是Douyu可以不需手動編譯即可令Java文件被執行,也可以動態增刪java文件內容,但與常見的java字節碼修改不同,Douyu的動態特性依賴于添加相應字符串到java文件對應內容后的重新編譯。

      在Douyu的engine.core包下有兩個非常重要的組件,堪稱是Douyu的核心所在,一個是調用com.sun.tools.javac包的javac類,一個是真正用于處理Douyu中javac命令的CleverCoder類(在com.sun.tools.javac.main.JavaCompiler與com.sun.tools.javac.comp.Enter中被調用),應該說,javac只是一個調用數據的馬甲,而核心在于CleverCoder。至于CleverCoder對于java文件的處理原理,則與jsp生成servlet的原理相類似(順便說一下,前天偶提到Douyu只能加載靜態頁面,現在看來并不確切,應該是Douyu可以將view層轉義為Java文件,再編譯執行轉義后的文件并反饋到頁面中去,由于Douyu中存在ViewEntry,view數據也會經由updateView函數進行逐行分析后處理并反饋,其與jsp轉servlet過程大同小異,但對其運行效率保留意見……)。

      Douyu加載java文件與類使用自定義的ResourceLoader,其繼承關系如下:URLClassLoader->LibClassLoader->ResourceLoader。

      ResourceLoader內部依賴Javac,以ConcurrentHashMap緩存數據,Douyu在每次loadResource時都會判斷目標對象是否存在,存在則調用已有對象,不存在則調用異化后的javac生成該對象。縱觀整個Douyu平臺對ResourceLoader的調用,顯而易見Douyu中ResourceLoader重點不是用于加載class。與標準ClassLoader相比,ResourceLoader更像一個javac命令的緩存與執行器,它之所以存在,實際上就是要加載java文件本身,類加載功能反倒其次。

      目前來說,ResourceLoader處理不同功能的函數接口并不統一,針對不同功能需要分別調用對應函數,例如在其DefaultContext中out時尚需要分別調用loadClassResource與loadStaticResource,而在Database的MetaData類中又需要調用compileClass(內部會調用findClassOrClassResource查詢指定類,有類加載,沒有則調用javac編譯java文件后加載),到了http包下屬的Connector里又得加載loadResource來匹配類與PrintWriter中數據。

      Douyu目前涵蓋有http請求與反饋、db操作、security驗證等主要功能,但實現程度普遍較低。比如數據庫方言僅支持mysql、oracle、sqlserver三種,而且只有mysql與oracle實現了不同的limit與非常少的操作優化,sqlserver部分暫時看還是空殼。security中的rule還只有一個接口,沒有看到具體業務邏輯與調用,能夠被checkPermission函數處理的Permission實現也非常有限。http協議部分雖然擁了有最基礎的協議解讀能力,但也僅僅是最基礎的能力而已,比如目前我即不能向Douyu服務器要求對目標資源進行gzip壓縮,Douyu也不可能根據瀏覽器判定此要求是否可行,更不要說反饋數據了,諸如此類的不足還有很多(僅以偶07年在各大小說網站刷票得到的http協議應用經驗看),建議作者去找一份http1.1協議文檔逐一比對并分別實現。沒辦法,誰讓Douyu是個孤立的平臺,開發難度自然大些(不過都寫上的話,性能又會大打折扣,照目前的業務邏輯完全補足協議與相關功能后,我斷言Douyu效率比不上Tomcat6,所以系統尚待優化)……

      綜上所述,竊以為Douyu平臺在技術上存在可行性與創新性(如果作者有閑錢的話,可以考慮在國內申請個技術新型專利,最起碼擺著好看),只是業務功能暫時不足,部分領域有待分工與優化,尚不具備很強的實用性,希望作者響應國父“革命尚未成功,同志仍需努力”號召,持續發展,與時俱進,吾輩就以觀后效了……

      以下揀選了兩張分析代碼時生成的Douyu關系圖(感覺比較散啊,侵入性太強了……):

       

      01

       

      00

      posted on 2009-11-18 14:43  cping  閱讀(213)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产午夜福利精品片久久| 人妻少妇偷人无码视频| 韩国午夜理伦三级| 亚洲熟妇精品一区二区| 免费播放一区二区三区| 小嫩批日出水无码视频免费| 亚洲男同志网站| 国产国产人免费人成免费| 麻豆国产成人AV在线播放| 久久综合激情网| 人妻少妇精品系列| 在线精品亚洲区一区二区| 久久亚洲精品无码播放| 2021国产精品视频网站| 久久精品国产亚洲av久| 91青青草视频在线观看的| 免费久久人人爽人人爽AV| 人妻丰满熟妇无码区免费| 国产成人综合在线观看不卡| 国产高清在线A免费视频观看| 国产精品中文字幕自拍| 国产精品国产亚洲区久久| 国内精品视频区在线2021| 日韩精品一区二区三区日韩| 亚洲av无码精品蜜桃| 建水县| 99久久国产综合精品色| 国产萌白酱喷水视频在线观看 | 亚洲韩欧美第25集完整版| 久热这里只精品视频99| 国产成人人综合亚洲欧美丁香花| 抚州市| 中文字幕亚洲人妻系列| 久久精品国产再热青青青| 青青草国产线观看| 国产主播精品福利午夜二区| 免费无码一区无码东京热| 国产大尺度一区二区视频| 欧美乱妇高清无乱码免费| 中文字幕国产精品日韩| jizz国产免费观看|