亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Vert.X企業(yè)級Web應(yīng)用設(shè)計(jì)與實(shí)現(xiàn)

        2015-07-25 06:51:38呂海東葛日波
        微型電腦應(yīng)用 2015年11期
        關(guān)鍵詞:服務(wù)器端企業(yè)級客戶端

        呂海東,葛日波

        0 引言

        當(dāng)前由于移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展,智能手機(jī)和平板請求訪問Web應(yīng)用極為普遍,進(jìn)而產(chǎn)生大量移動(dòng)客戶端訪問Web應(yīng)用導(dǎo)致Web Server無法滿足如此巨大的高并發(fā)性訪問需求,即所謂的C10K問題,當(dāng)并發(fā)連接超過10,000以上時(shí)使用傳統(tǒng)技術(shù)會(huì)引發(fā)暫停,類似微信的實(shí)時(shí)數(shù)據(jù)傳輸類應(yīng)用尤為突出。

        傳統(tǒng)的企業(yè)級 Web應(yīng)用一般使用基于 Oracle公司的JavaEE的JSSHA(JavaEE+Struts+Spring+Hibernate+AJAX)框架[3],或基于微軟 DOTNET平臺(tái)開發(fā),它們都使用多線程技術(shù)實(shí)現(xiàn)多連接請求,因此都面臨C10K性能瓶頸,要解決大并發(fā)客戶的請求只能進(jìn)行服務(wù)器群集,導(dǎo)致系統(tǒng)設(shè)備投資巨大,中小企業(yè)難以承受。

        為解決以上問題,最先出現(xiàn)的解決方案就是Node,js技術(shù),通過采用單線程、非阻塞、異步工作模式、事件循環(huán)機(jī)制很好解決了C10K問題,一般情況下單CPU服務(wù)器即可支持超萬個(gè)并發(fā)連接。其后Vert.x在Node.js的優(yōu)點(diǎn)之上,將基礎(chǔ)平臺(tái)移到JVM上,引入分布式并發(fā)機(jī)制以及自動(dòng)支持多核CPU的能力,在一個(gè)單CPU八核的Intel E5服務(wù)器上即可支持?jǐn)?shù)十萬并發(fā)連接請求,因此Vert.x必將成為未來開發(fā)移動(dòng)Web應(yīng)用的首選平臺(tái)。

        本文重點(diǎn)介紹了使用Vert.x服務(wù)器框架實(shí)現(xiàn)企業(yè)級Web應(yīng)用的設(shè)計(jì)和實(shí)現(xiàn),并結(jié)合一個(gè)使用微信公共平臺(tái)技術(shù)的Web應(yīng)用的開發(fā)進(jìn)行說明。

        1 Vert.x概述

        Vert.x是基于JVM平臺(tái)的輕量級,高性能的服務(wù)器端框架。專門用于開發(fā)移動(dòng)應(yīng)用,Web和企業(yè)級應(yīng)用,它的核心特點(diǎn)是單線程,非阻塞,事件驅(qū)動(dòng)模型,多樣性,高并發(fā)。

        Vert.x的核心是Vert.x實(shí)例[4],它是運(yùn)行所有Vert.x組件的容器,Vert.x框架自動(dòng)識別CPU內(nèi)核個(gè)數(shù),在每個(gè)內(nèi)核上都創(chuàng)建一個(gè)實(shí)例,并把所有組件同時(shí)部署在每個(gè)實(shí)例中,實(shí)現(xiàn)組件的并行運(yùn)行,并內(nèi)置機(jī)制自動(dòng)執(zhí)行動(dòng)態(tài)負(fù)載均衡,當(dāng)一個(gè)事件接收時(shí)自動(dòng)選擇空閑的組件執(zhí)行,從而實(shí)現(xiàn)高并發(fā)Web應(yīng)用。更進(jìn)一步Vert.x實(shí)例可以分布到多個(gè)服務(wù)器上,實(shí)現(xiàn)分布式處理,實(shí)現(xiàn)系統(tǒng)的可伸縮性,實(shí)現(xiàn)超大量級并發(fā)請求。

        Vert.x使用基于角色的事件循環(huán)監(jiān)測的并發(fā)模式(Actor-like Concurrency Model)[5],徹底地解決了C10K問題。Vert.x基本編程組件稱為Verticle,可將企業(yè)級應(yīng)用的各個(gè)功能分解為眾多Verticle,每個(gè)Verticle執(zhí)行單一的業(yè)務(wù)功能,所有Verticle都獨(dú)立運(yùn)行在Vert.x實(shí)例一個(gè)線程中,而非傳統(tǒng)的多線程模式。當(dāng)應(yīng)用業(yè)務(wù)復(fù)雜,使用的Verticle較多時(shí),可以使用模塊(Module)機(jī)制將相似功能的 Verticle打包到模塊中,整個(gè)項(xiàng)目就是由不同的模塊組成,載入模塊時(shí),模塊中包含的Verticle會(huì)自動(dòng)載入Vert.x實(shí)例中運(yùn)行。

        Verticle之間不能直接調(diào)用和傳遞數(shù)據(jù),只能通過在分布式Event Bus上發(fā)布和接收事件完成。Verticle通過在Event Bus上注冊事件處理器來接收事件和事件中攜帶的數(shù)據(jù),也可以向Event Bus上發(fā)送事件和傳輸數(shù)據(jù)。

        事件的發(fā)送和接收可以采用3種模式:

        (1)發(fā)布-訂閱模式:一個(gè)Event Bus上的事件可以被所有注冊的接收者接收,實(shí)現(xiàn)群發(fā)功能,如數(shù)據(jù)的檢索和顯示等。

        (2)點(diǎn)對點(diǎn)模式:一個(gè)事件只能被一個(gè)接收者接收,完成定點(diǎn)數(shù)據(jù)傳輸功能,如工作流審批等業(yè)務(wù)可以通過此模式完成。

        (3)請求-回復(fù)模式:在點(diǎn)對點(diǎn)基礎(chǔ)上增加自動(dòng)回復(fù)功能,可以實(shí)現(xiàn)對用戶的操作結(jié)果提示功能。

        使用Vert.x框架設(shè)計(jì)實(shí)現(xiàn)企業(yè)級應(yīng)用的核心工作就是編寫完成實(shí)現(xiàn)各種業(yè)務(wù)功能的 Verticle,定義各種 Event Bus的事件地址和事件處理器注冊,通過在Event Bus發(fā)布和接收事件,業(yè)務(wù)Verticle之間完成間接調(diào)用,以此實(shí)現(xiàn)整個(gè)系統(tǒng)的業(yè)務(wù)功能。

        2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

        2.1 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)

        傳統(tǒng)的企業(yè)級應(yīng)用設(shè)計(jì)開發(fā)中,如基于 JSSHA(JavaEE+Struts+Spring+Hibernate+Ajax),通常采用分層的架構(gòu)設(shè)計(jì),將整個(gè)項(xiàng)目分解為數(shù)據(jù)服務(wù)層(DS-DataBase Service),數(shù)據(jù)訪問層(DAO-Data Access Object),業(yè)務(wù)層(Bo-Business Object),數(shù)據(jù)傳輸層(DTO-Data Transfer Object),控制層(CO-Controller Object),視圖層(VO-View Object)。

        本文使用Vert.x開發(fā)設(shè)計(jì)了基于微信公共平臺(tái)的高校學(xué)生課程考勤系統(tǒng),由于在每節(jié)課的課前和課后需要學(xué)生使用微信掃描投影布顯示的二維碼進(jìn)行課程的簽到,全校平均一萬多學(xué)生同時(shí)進(jìn)行掃描并接收處理,使用傳統(tǒng)的Tomcat服務(wù)器,無法完成如此高并發(fā)的請求,因此在綜合評估Node.js和Vert.x后,最終選擇Vert.x框架實(shí)現(xiàn)。

        由于Vert.x框架出現(xiàn)較晚,并沒有一個(gè)成熟的應(yīng)用開發(fā)架構(gòu),目前還處于探索和創(chuàng)新階段。本文借鑒JSSHA架構(gòu)成熟的分層設(shè)計(jì)技術(shù),采用了類似的架構(gòu)設(shè)計(jì),系統(tǒng)總體組成參如圖1所示:

        圖1 基于Vert.x的企業(yè)級應(yīng)用架構(gòu)組成

        另外在開發(fā)語言選擇時(shí),雖然Vert.x支持多語言開發(fā),如 Java、JavaScript、CoffeeScript、Ruby、Python or Groovy等,考慮到Vert.x的異步編程模式,使用Java編程代碼量過大,不適合異步編程,JavaScript是最佳選擇,內(nèi)置的回調(diào)函數(shù)是實(shí)現(xiàn)異步編程的最佳選擇。

        2.2 數(shù)據(jù)服務(wù)層設(shè)計(jì)實(shí)現(xiàn)

        數(shù)據(jù)服務(wù)層組件Verticle負(fù)責(zé)連接MySQL數(shù)據(jù)庫,執(zhí)行 SQL語句,完成數(shù)據(jù)的增刪改查操作。該層選擇成熟的第三方模塊 io.vertx~mod-mysql-postgresql_2.10~0.3.1[6],實(shí)現(xiàn)操作MySQL數(shù)據(jù)庫,并使用異步工作模式,通過在Event Bus上發(fā)送事件,完成對數(shù)據(jù)表的 SQL操作。該層的核心實(shí)現(xiàn)示意代碼如下程序所示。

        部署該模塊并傳入數(shù)據(jù)庫配置信息即可,參數(shù) address表示模塊監(jiān)聽的事件地址,通過向地址city.oa.lesson.dao發(fā)送事件,并傳遞標(biāo)準(zhǔn)的SQL 動(dòng)作即可實(shí)現(xiàn)對數(shù)據(jù)庫的操作。

        2.3 數(shù)據(jù)訪問層(DAO)設(shè)計(jì)實(shí)現(xiàn)

        數(shù)據(jù)訪問層負(fù)責(zé)對業(yè)務(wù)對象的持久化操作,實(shí)現(xiàn)與Hibernate相同的功能。每個(gè)數(shù)據(jù)表的讀寫設(shè)計(jì)為一個(gè)Verticle,將所有表的數(shù)據(jù)訪問Verticle打包到DAO模塊中。如下代碼為分院管理的DAO層實(shí)現(xiàn)示意代碼。

        MySQL模塊接收標(biāo)準(zhǔn)化的Action參數(shù),以此完成SQL執(zhí)行并返回執(zhí)行結(jié)果。

        2.4 業(yè)務(wù)層(BO)設(shè)計(jì)實(shí)現(xiàn)

        業(yè)務(wù)層模塊包含實(shí)現(xiàn)各種業(yè)務(wù)功能的 Verticle,一般情況下將每個(gè)業(yè)務(wù)對象的管理形成單獨(dú)的模塊,如本系統(tǒng)中的分院模塊,專業(yè)模塊,班級和選課模塊等。業(yè)務(wù)模塊接收界面模塊發(fā)出的業(yè)務(wù)處理請求事件,對傳輸?shù)膮?shù)進(jìn)行解析,發(fā)出對DAO層調(diào)用的事件,完成業(yè)務(wù)處理。由于編程代碼較多,只簡要示意對分院增加的代碼。

        2.5 控制層(CO)設(shè)計(jì)實(shí)現(xiàn)

        使用 Vert.x框架,不需要進(jìn)行控制層編程,Event Bus擔(dān)當(dāng)控制層的角色,只需在Event Bus注冊不同的事件地址,并注冊事件接收處理器即可。

        2.6 視圖層(UIO)實(shí)現(xiàn)

        視圖層負(fù)責(zé)用戶操作界面的顯示和數(shù)據(jù)輸入,采用Web頁面技術(shù) HTML、CSS、JavaScript以及 jQuery,Bootstrap框架,結(jié)合Vert.x的Event Bus Bridge,將服務(wù)器端的Event Bus延伸到客戶端,實(shí)現(xiàn)服務(wù)器端和客戶端的實(shí)時(shí)數(shù)據(jù)通訊,客戶端可以發(fā)送事件調(diào)用服務(wù)器端的 Verticle,也可以定義事件接收處理回調(diào)函數(shù)接收服務(wù)器發(fā)送的事件和數(shù)據(jù),實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的查詢顯示。并且這種數(shù)據(jù)傳輸是服務(wù)器推送實(shí)現(xiàn)的,不需要客戶端進(jìn)行HTTP請求,因此實(shí)現(xiàn)了與WebSocket技術(shù)相同的實(shí)時(shí)Web(Real Time Web)功能,由于只傳輸包含數(shù)據(jù)的JSON對象,克服了以往普通HTTP或AJAX請求包含的請求頭和響應(yīng)頭信息,傳輸效率高,響應(yīng)速度快,特別適合各種實(shí)時(shí)性場合,如工業(yè)監(jiān)控,股票行情,鐵路航空訂票等。

        客戶端頁面要連接Vert.x服務(wù)器的Event Bus,需要在頁面中引入Event Bus Bridge和SockJ,為管理客戶端元素,引入jQuery框架,引入代碼如下:

        客戶端頁面通過 jQuery取得表單元素輸入的數(shù)據(jù),通過Event Bus Bridge連接到服務(wù)器端的Event Bus上,對指定的地址發(fā)送事件即可,服務(wù)器端的業(yè)務(wù)處理Verticle會(huì)監(jiān)聽此地址的事件,完成對應(yīng)的業(yè)務(wù)處理,界面的顯示效果如圖2所示:

        圖2 增加分院視圖層頁面顯示

        2.7 傳輸層的(DTO)實(shí)現(xiàn)

        在傳統(tǒng)的Java項(xiàng)目中,需要編程JavaBean實(shí)現(xiàn)各層的數(shù)據(jù)傳遞,在Vert.x中可以直接使用JavaScript的JSON對象完成數(shù)據(jù)的傳輸,而且Vert.x推薦在Event Bus傳輸JSON對象。如下代碼是對分院信息進(jìn)行封裝的JSON對象實(shí)現(xiàn)代碼,顯而易見要比JavaBean簡單得多。

        3 總結(jié)

        Vert.x天生的大客戶并發(fā)連接請求的的處理能力,以及全新的異步響應(yīng)式工作模式,支持分布式Event Bus,組件調(diào)用完全解耦和,超級簡單的編程能力必將在企業(yè)級應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。Vert.x全面超越 Node.js性能上絕對優(yōu)勢,而Node.js又極大超越傳統(tǒng)Web框架,如JavaEE,DOT.NET,必將推動(dòng)Vert.x的飛速發(fā)展,進(jìn)而引起Web領(lǐng)域顛覆性的革命,極有可能徹底淘汰以AJAX為主的web2.0客戶端技術(shù),以及傳統(tǒng)的服務(wù)器框架,引領(lǐng)新的 Web應(yīng)用開發(fā)模式。

        [1] Tero Parviainen. Real-time Web Application Development using Vert.x 2.0 [M]. BIRMINGHAM -MUMBAI:Packt Publishing,2013.

        [2] Vert.x官方網(wǎng)址 [EB/OL].http://vertx.io/.

        [3] 呂海東,張坤著.JavaEE企業(yè)級應(yīng)用開發(fā)實(shí)例教程[M].北京:清華大學(xué)大學(xué)出版社,2009.

        [4] Enterprise messaging and integration with Vert.x [EB/OL]http://www.javaworld.com/article/2078838/mobile-java/o pen-source-java-projects-vert-x.html/.

        [5] Simone Scarduzio. Instant Vert.x [M]. BIRMINGHAM -MUMBAI: Packt Publishing,2013.

        [6] Vert.x mysql官方網(wǎng)址 [EB/OL]. https://github.com/ver t-x/mod-mysql-postgresql.

        猜你喜歡
        服務(wù)器端企業(yè)級客戶端
        企業(yè)級BOM數(shù)據(jù)管理概要
        縣級臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
        傳媒評論(2018年4期)2018-06-27 08:20:24
        孵化垂直頻道:新聞客戶端新策略
        傳媒評論(2018年4期)2018-06-27 08:20:16
        基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
        電子測試(2018年10期)2018-06-26 05:53:34
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        基于慕課網(wǎng)的“企業(yè)級應(yīng)用開發(fā)”課堂教學(xué)改革探索
        電子制作(2017年10期)2017-04-18 07:23:03
        企業(yè)級信息系統(tǒng)應(yīng)用級災(zāi)備建設(shè)與應(yīng)用
        廣西電力(2016年4期)2016-07-10 10:23:38
        在Windows中安裝OpenVPN
        城市軌道交通企業(yè)級BIM應(yīng)用策劃研究
        客戶端空間數(shù)據(jù)緩存策略
        无人区乱码一区二区三区| 日韩精品永久免费播放平台| 国产精品国产三级国av在线观看| 亚洲岛国一区二区三区| 国产激情无码一区二区| 国产色综合天天综合网| www.日本一区| 全国一区二区三区女厕偷拍| 欧美肥妇毛多水多bbxx水蜜桃| 在线观看免费人成视频色9| 伊香蕉大综综综合久久| 国内国外日产一区二区| 曰批免费视频播放免费| 公粗挺进了我的密道在线播放贝壳| 国产a级网站| 亚洲天堂av免费在线| 激情综合五月开心婷婷| 无码一区二区三区在线| 中文字幕人妻中文| 国产超碰在线91观看| 天堂在线资源中文在线8| 丰满少妇在线观看网站| 国产精品美女一级在线观看| 一区二区三区精品免费| 在线看无码的免费网站| 久久亚洲黄色| 色青青女同性恋视频日本熟女 | 色爱情人网站| 国产在线精品欧美日韩电影| 欧美日韩综合在线视频免费看| 久久久人妻精品一区bav| 国内精品久久久人妻中文字幕| 国产精品久久久久久久久鸭 | 中文字幕亚洲精品第一页| 久久红精品一区二区三区| 亚洲美腿丝袜 欧美另类| 国产精品黄色片在线观看| 狼人精品剧情av在线观看| 好男人社区影院www| 国产一国产一级新婚之夜| 骚货人妻视频中文字幕|