【正文】
章主要是介紹框架設(shè)計(jì)與實(shí)現(xiàn)過程中主要使用到的設(shè)計(jì)工具、開發(fā)工具、開發(fā)平臺以及 javascript 的一些高級語言特性。 以上七點(diǎn)主要是分析了 平臺存在的不足和一些設(shè)計(jì)實(shí)現(xiàn)的困難之處。 ( 6) 封裝性非常低,對于一些常用操作,如 Cookie,Seesion 等都需要根據(jù) Http 頭信息重新實(shí)現(xiàn),難度較大。如今不管哪個(gè)系統(tǒng)平臺下, javascript 開發(fā) IDE 都很少,或者難以使用,缺乏有效的調(diào)試工具,編碼效率得不到提高。缺乏良好的桌面開發(fā)環(huán)境,對于類 Unix 系統(tǒng)的使用,如 Linux 的發(fā)行版 Ubuntu 有生疏性,無法得心應(yīng)手。問題的交流只能在 Stack Overflow 等國外論壇但是是英文環(huán)境,交流存在一定的困難。主要表現(xiàn)在兩個(gè)方面 ,一是新平臺國內(nèi)研究使用的人暫時(shí)不多,遇到問題無法立馬得到咨詢有效的解決 。如果跟隨版本變化則框架的穩(wěn)定性無法保證。由于平臺的新穎性,多數(shù) API 還處在變化之中,因此設(shè)計(jì)開發(fā)該框架主要存在以下一些問題。在現(xiàn)有的已存在的 Node 的 MVC 框架中,如 Express,已經(jīng)能夠滿足大多數(shù)業(yè)務(wù)邏輯 ,但是因?yàn)槭菄忾_發(fā),其文檔資料大多數(shù)是英文編寫,需要高昂的學(xué)習(xí)成本,而且大多數(shù)功能對于一般的應(yīng)用是冗余的,加之配置復(fù)雜,遇到問題無法得到有效快速的解 決途徑,貿(mào)然采用存在大的風(fēng)險(xiǎn)。這些功能點(diǎn)包括 路由轉(zhuǎn)發(fā)與映射,屬性注入, Cookie 實(shí)現(xiàn), Sesison 實(shí)現(xiàn)等。本框架將封裝 的底層接口,對請求數(shù)據(jù)等提供統(tǒng)一簡潔的方 式,從而較大幅度的提升開發(fā)效率。如基于 JAVA EE 的 Struts2 + Spring3 + jsp MVC 模式等 。基于此點(diǎn),本論文開發(fā)設(shè)計(jì)一個(gè)簡單小型的 MVC 框架,簡化 的使用難度的同時(shí)提高開發(fā)效率。直接使用底層接口做開發(fā)需要分析大量的 協(xié)議內(nèi)容。 只提供底層的 接口。一般的處理辦法是后臺處理完成后給前臺客戶端異同處理完成的通知。如果應(yīng)用是需要進(jìn)行大量的 第 6 頁 共 81 頁 計(jì)算除非人為地分開計(jì)算,否則將會有相當(dāng)大的請求響應(yīng)延遲。但實(shí)際上多線程通過較大的開銷也能達(dá)到同樣的吞吐量,而且不必為多核環(huán)境進(jìn)行特殊的配置。 ( 4)需要大量計(jì)算的程序 (在 版本以前)不支持多線程。這個(gè)過程是復(fù)雜的線性的,假如拆分為非線性的邏輯,那么其復(fù)雜 程度將提升幾個(gè)數(shù)量級。 ( 3)復(fù)雜邏輯的事務(wù) 的控制流是非線性的,它由一個(gè)個(gè)事件響應(yīng)組成,但人的思維卻是線性的,當(dāng)試圖轉(zhuǎn)換思維來適應(yīng)語言或編譯器時(shí),就得付出性能或者編碼方面的代價(jià)。包括 Chrome 的 V8 引擎在內(nèi)。 JavaScript 當(dāng)下支持的仍是定長的 UCS2 編碼 而不是 UTF16,因此對于處理使用 UCS4 進(jìn)行編碼 的字符無能為力。UTF16 編碼采用定長的雙字節(jié)編碼處理 UCS2 以內(nèi)的 字符,對于以外的部分則使用多字節(jié)的變長編碼。隨后 Unicode 意識到用 2 個(gè)字節(jié)表示所有字符是遠(yuǎn)遠(yuǎn)不夠的,隨后推出了 UCS4 編碼,即用 4 個(gè)字節(jié)來表示一個(gè) Unicode 字符。這是 設(shè)計(jì)的問題,源于當(dāng)時(shí)設(shè)計(jì)者的主觀判斷。明顯,漢字就不止這個(gè)數(shù)目。實(shí)際上來說這不是 本身造成的,問題而是出在 JavaScript 標(biāo)準(zhǔn)上。多進(jìn)程的 往往是 在執(zhí)行同一任務(wù),通過多進(jìn)程利用多處理器的資源,但遇到多進(jìn)程相互協(xié)作時(shí), 的短板就出現(xiàn)了。例如在給用戶提供界面的時(shí)候后臺需要進(jìn)行某個(gè)計(jì)算,為了使用戶界面不出現(xiàn)阻塞狀態(tài),不得不開啟多線程或多進(jìn)程。但如果面對的是單用戶,譬如本地的命令行工具或者圖形界面,那么就不存在所謂的大量并發(fā)請求。前一節(jié)提到 的平臺優(yōu)點(diǎn) ,本節(jié)則簡要介紹下 的短板所在。與大多數(shù)新語言平臺本質(zhì)一樣, 也是舊瓶裝新酒。但是 與其他任何平臺一樣,都存在優(yōu)點(diǎn)和缺點(diǎn),如果非要使用它的缺點(diǎn)來完成業(yè)務(wù)需求,那么同樣會遇到困難和僵局。 平臺的非擅長領(lǐng)域 一個(gè)優(yōu)秀的平臺能夠吸引大量開發(fā)者的關(guān)注。 (6)TCP/UDP 套接字應(yīng)用程序,即時(shí)通信系統(tǒng); 第 4 頁 共 81 頁 (7)客戶端 JavaScript 編譯器。 (2)具有復(fù)雜邏輯的網(wǎng)站;如一般的 MIS系統(tǒng)。那么為網(wǎng)絡(luò)而生的 能夠做一下事情。在 Windows 下, libuv 使用了 Windows 的 IOCP( Input/Output Completion Port,輸入輸出完成端口)機(jī)制,實(shí)現(xiàn)高性能,而對于 Linux、 UNIX,Mac OS X 等操作系統(tǒng), 的 libuv 庫通過使用 libeio 和 libev 的封裝來利用 kqueue 或 epoll。此外 除了使用 Google 的 Chrome V8 作為 JavaScript 引擎,它還 使用了高效的 libeio 和庫 libev 支持事件驅(qū)動和異步式 I/O。在應(yīng)對惡意訪問方面, 對于低速的 DOS 攻擊, 只增加事件堆棧中的請求請求樹立,而不會馬上給出請求應(yīng)答,這樣有效的減少了線程資源的開銷,很大程度上提高了 Web 應(yīng)用的健壯性和安全性。 圖 進(jìn)程在進(jìn)行事件處理時(shí)具有時(shí)間的唯一性,它不會同時(shí)處理多個(gè)事件請求,在處理完一個(gè)事件后就進(jìn)程就進(jìn)入下一個(gè)事件循環(huán),檢查 并繼續(xù)處理后面的 第 3 頁 共 81 頁 事件。基于事件的異步處理機(jī)制的 對于所有的網(wǎng)絡(luò)通信、磁盤讀寫、數(shù)據(jù)庫操作等都以異步請求的方式實(shí)現(xiàn),最后將執(zhí)行得到的結(jié)果交給事件循環(huán)進(jìn)行處理。 運(yùn)行的過程中將管理一個(gè)事件堆棧,不斷地循環(huán)執(zhí)行事件然后等待下一個(gè)事件的觸發(fā)。傳統(tǒng)架構(gòu)對于高并發(fā)的解決方案是采用多線程模型,也就是一個(gè)系統(tǒng)線程處理一個(gè)業(yè)務(wù)邏輯,通過系統(tǒng)線程切方式彌補(bǔ)同步式 I/O 的時(shí)間開銷。 事件驅(qū)動與異步式 I/O 模型。 既可以在網(wǎng)絡(luò) 環(huán)境下運(yùn)行也可以非網(wǎng)絡(luò)的環(huán)境下運(yùn)行,如即時(shí)編譯終端。使用 平臺好處之一在于不用額外搭建 HTTP 服務(wù)器, 本身融合的 Http服務(wù)器既可以作為開發(fā)階段的調(diào)試環(huán)境也可以直接作為產(chǎn)品提供給客戶使用。比如,在使用 PHP 進(jìn)行業(yè)務(wù)系統(tǒng)開發(fā),首先必須搭建一個(gè) HTTP 服務(wù)器如 Apache, IIS 之類。 平臺的優(yōu)勢領(lǐng)域 自身融合入 HTTP 服務(wù)器,這對于組合網(wǎng)站和服務(wù)器是非常簡 單方便的。因此,采用 web應(yīng)用或者企業(yè)應(yīng)用能夠較大程度的降低硬件成本和提高應(yīng)用處理業(yè)務(wù)的效率。而在 Node 中,后臺容器 用 C++語言設(shè)計(jì)把服務(wù)器和容器本身融合在一起,采用 瀏覽器 后臺容器 模式 進(jìn)行請求應(yīng)答,大大提高了通信的效率。 目前 web 應(yīng)用普遍采用 Tomcat,Apache Server,IIS等做 HTTP 服務(wù)器, HTML,CSS javascript 做前端展示,以 瀏覽器 服務(wù)器 后臺 容器 模式來進(jìn)行請求應(yīng)答。 是一種新的軟件開發(fā)平臺,它的特殊性決定了它不僅可以作為一門開發(fā)編程語言,也可以像 Ruby 、 Pythond 等語言一樣作為一個(gè)開發(fā)者平臺。由于javascript 在瀏覽器端具有極高的執(zhí)行效率,并且兼容多種流浪器,這促使其中一部分人思考是否可以把 javascript 放在服務(wù)端運(yùn)行,能夠像其他 web 語言一樣提供業(yè)務(wù)邏輯處理。 Javascript 跟隨網(wǎng)絡(luò)技術(shù)的發(fā)展得到了也得到了大幅的提升。 ii ABSTRACT is not only a separate language,but a new software development platform. Just like the Python and the Ruby, they are both language and transplant the javascript from your browser to a mon server. That makes JavaScript can achieve as file systems, operating systems, work munications, and other is always running in Chorme V8 engine, with asynchronous I / O and eventdriven architecture design and singlethreaded model, and builtin HTTP server, mainly for building highperformance, highconcurrency, highly scalable really get a high performance ,while the package of bottom part is low example, the mon data requested need analysis of HTTP and analyze the required data from the request data stream,without providing a rich java web style offered an advantage and a disadvantage. The advantage is that it provided the developers with a lot of freedom so that the developers can use the lowlevel interface to plete a variety of functions, while the disadvantage is that the direct use of the lowlevel interface for system application development got very low efficiency, because of the analyzing and processing for the various kinds of data need a lot of is just carried our, in our country, the framework used the in doing application development is still lacking. A directly use of the underlying to work on an application development may be much more difficult. In order to deal with this kind of situation, this article will describe a design of a simple and small MVC framework to simplified the use of , and to improve the development efficiency at the same time. Nowadays, Web applications get a wide use of the MVC pattern (ModelViewController, Model, View, Controller). Such as the Struts2 + Spring3 + jsp MVC model based JAVA EE . Learning from the structure and function of these existing framework, this article try to describe the design iii and development of FastJsonWeb framework. This framework will pack the underlying interface, and provide a unified and concise manner to the request data, which will improve the development efficiency a lot. This article will extract the framework function points according to the analysis of the existing framework of different platforms. These function points include the route forwarding and mapping, property injection, cookie achievement and Sesison achievement and something more. 第 1 頁 共 81 頁 第一章 緒論 介紹 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和網(wǎng)絡(luò)平臺的推廣,越來越多的應(yīng)用是基于網(wǎng)頁形式來提供。 關(guān)鍵詞: ?;趯Σ煌脚_現(xiàn)有框架分析提取出本框架的功能點(diǎn)。借鑒這些其他平臺上現(xiàn)有的框架結(jié)構(gòu)和功能,設(shè)計(jì)開發(fā) FastJsonWeb 框架。 目前 web 應(yīng)用中,普遍使用了 MVC 模式(即 ModelViewController,模型,