<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    nighty

    折騰的年華
    posts - 37, comments - 143, trackbacks - 0, articles - 0

    B/S,C/S架構混合使用

    Posted on 2008-05-06 12:43 寒武紀 閱讀(13763) 評論(25)  編輯  收藏 所屬分類: 軟件架構

        一般而言,我們平常接觸的大多數項目都應該是單純使用B/S或是C/S,除非在特殊場合,否則比較少混合使用B/S,C/S架構。首先說一下對這二種架構特點的一些個人理解。B/S應該是目前很多項目都應用的架構,瀏覽器的方式使得用戶的使用十分方便,用戶可以何時何地通過Internet訪問URL而進行相應的工作,升級維護也能比較集中,缺點就是瀏覽器的表現能力受限以及常常受非議的安全性問題,如果軟件的應用范圍區域不集中,而且用戶經常變換地點進行訪問,那么這種架構是非常適合的。C/S架構的C端有非常強的處理能力,所以在交互表現和安全方面可以做得比瀏覽器強,但是缺點也是非常明顯的,安裝部署、升級維護、版本兼容都是比較頭大的事情,一般的適用場景是集中的辦公室場所,用戶使用范圍相對穩定,以及一些對業務處理非常復雜的場合,為了降低服務器的負荷,同樣需要C模式的支持。
        以前接觸過的電信領域,就有過混合架構的軟件。但是都是非常寵大,一直都對其實現方案比較感興趣,但是都沒有機會進一步了解。最近搜索了一下相關的資料,總結一下混合應用的一些想法(只針對Java方向)。
        ①混合架構的問題集中點。服務端共享,客戶端采用不同的表現方式,共享的應該是業務層接口,持久層應該是屏蔽的。應用層的消息傳遞就是整個應用的關鍵所在,雖然像Jakarta提供的httpClient這種模仿瀏覽器的組件,但是畢竟是模仿,在很多方面的功能還是缺失的。
        ②最傳統的方式是采用EJB做為服務,這個寵然大物容易讓人害怕,不過在分布式的系統中它還是有應用優勢的,像電信和金融這種行業應用還是比較廣的,而且現成的中間件和應用服務器商都比較多,像Oracel、BEA、IBM、Sun都有成熟的應用產品,當然開發的成本和人力投入也是恐龍級數據的。
        ③有網友說在C端直接訪問數據庫,B/S結構不變,也就是通過數據庫進行共享。這種方式是不可取的,二個缺點:把服務器的業務邏輯搬到了C端上,嚴格上講是不安全的,升級維護也非常麻煩;并發控制的壓力都在數據庫上。
        ④采用RMI,這個老古董相信應該很多人都不使用了,因為它的使用要一連串的手續,比如服務接口定義必須實現Remote接口,服務Server在實現時必須繼承UnicastRemoteobject類,必須使用rmic指令產生stub和skeleton等,設置上繁雜。
        ⑤Spring 遠程服務。這個應該說是比較可取的,大家都比較喜歡輕量級的東西。就如第一點所說的,通過遠程服務,我們可以在客戶直接調用服務端的服務接口,就像本地調用一樣,Spring對遠程服務提供了好幾種實現方案。
        ⑥WebService。適合異構環境,但是WSDL的這種方式相對來說會比較耗費資料,因為標準定義除了業務內容外,還有許多另外的說明內容。
        Spring遠程服務實現方案介紹:
        ⑴Spring + RMI。Spring把傳統的RMI方式的繁雜設置去掉,只要配置Bean文件就和定義服務接口可以。RMI的服務啟動和管理都交給Spring來處理。RMI訪問的缺點就是對防火墻的穿透力比較差。
        ⑵Spring + Caucho的Hessian、Burlap。Hessian使用Http將對象以中性的二進制消息進行傳送,而不像RMI使用Java的序列化格式(這種序列化是專制的,不是Sun提供的序列化機制),由于是二進制消息,所以不受限于某種實現語言,傳輸時所需要的帶寬較小是其優點。Burlap是以XML文件格式傳送對象,XML文件有較高可讀性,應用程序只要能解釋XML就能接收消息,當然也不限于某種語言,但是組裝XML和解釋XML都需要消耗資源,當傳輸大數據時性能應該存在問題。
        ⑶Spring + Http Invoker。由于Hessian的序列化機制不是正統的Java序列化機制,所以當遇到傳輸復雜的業務模型時,就會存在各種問題,為此,Spring又提供了Http Invoker,同樣是使用Http傳送對象,而且是使用Java的序列化機制。相比RMI,Http對防火墻的穿透力要強。
        后來嘗試了最后的這種Http Invoker方式,是在Spring2.0版本下嘗試的,開發非常簡單,網上也有大量的資料介紹。應該說從這里入口可以做一些嘗試。目前遇到的一個項目就需要混合架構,B/S采用Spring2 + Struts2 + Hiberntae3,瀏覽器只提供一些查詢功能和數據展現,C端采用Eclipse的RCP平臺,共享服務器的業務接口,調用就采用Http Invoker遠程服務,復雜的業務功能都集中在C端上。



    剛進場的時候戲就落幕

    Feedback

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2008-05-06 12:59 by origo
    想學習spring http Invoker 的C/S 模式和Spring2 + Struts2 + Hiberntae3的B/S模式的 可以訪問這個網站:http://soyframework.com 有詳細例子。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-06 15:24 by blackhero
    現在很多cs和bs混合的項目,互補不同

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-06 16:50 by 大道自然
    和我的想法差不多,但是我現在還沒有時間去實現C/S結構

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-06 17:26 by 銀河使者
    以前也做過很多這處C/S和B/S混合的項目。但有些客戶端使用的不是java。當然,服務端也非得使用象EJB一樣的重量級組件。如我做過的一個系統C/S部分的客戶端使用的是delphi,而服務端只是普通的jsp/servlet程序,也未使用web service,而是通過servlet來為C/S部分的客戶端(delphi客戶端)返回數據(也包括一些加密數據),而客戶端通過http協議訪問servlet。當然,B/S部分的還是jsp。這樣實現個人感覺比較簡單。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-06 21:59 by jasin2008
    c/s 遠程訪問如何維持會話狀態,如何保證數據傳輸的安全性,不知道樓主在這方面是怎么解決的

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2008-05-07 09:10 by 寒武紀
    @jasin2008
    個人覺得C/S遠程調用要像B/S那樣保持會話是比較困難的,遠程調用和瀏覽器的Cookie機制脫節,所以要模擬會話是有難度的。有網友給出了一些看法,我覺得這種想法挺不錯的,可以參照一下。
    http://www.javaeye.com/topic/82492

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 09:12 by 銀河使者
    實際上C/S和B/S從底層技術上沒什么區別。C/S只是模擬瀏覽器來訪問服務端資源,至于會話狀態,可以讀取http響應頭的Session-cookie信息來處理,至于安全性,客戶端可以使用https協議訪問服務端,或是自已加密數據。

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2008-05-07 11:32 by origo
    @大道自然
    目前有很多現成的組件可以用,c/s的實現還是比較容易的,swing的方式最忌諱的就是代碼混亂,沒有框架支持。

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2008-05-07 11:33 by origo
    @jasin2008
    會話的維持保持在后臺,每個請求維持一個會話,這方便B/S和C/S實現起來也差不多吧

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 14:27 by 銀河使者
    是的,從技術上差不多。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 16:37 by for_the_king
    運用Swing+http invoker+spring+hibernate開發C/S架構的系統從技術上沒有難度,而且java web start可以解決客戶端自動升級的問題,兩年前我們公司一個項目采用這種方式客戶就非常喜歡,客戶又感受到了傳統C/S應用的用戶體驗,而且沒有升級麻煩,只局限在局域網中使用等待一系列問題。樓主擔心的問題10行代碼就可以搞定(http://www.javaeye.com/topic/82492,這么笨的方法也虧這個人想的出來),首先擴展SimpleHttpInvokerRequestExecutor的openConnection()方法把客戶端的信息(登錄用戶,客戶端選擇的locale等)加到URL后面,在服務器端寫一個filter把這些信息取出來放到threadlocal中,在Service中不就可以隨便用了嗎,httpinvoker本身就是無狀態的,干嘛非把httpSession牽扯進來,想法就沒對。

    其實這種架構最麻煩的莫過于界面的開發,在我們原來的項目中一會兒客戶想要一個可以翻頁的表格,過幾天他又想點擊表頭可以排序,單列排序他又不滿足了他又想多列排序,表格搞得差不多了表單又來了,Swing的布局管理非常靈活,要做好一個表單真得費一番勁,而且客戶總喜歡把他們用VB,delphi做的系統拿來跟你比,說你界面丑陋啦,日期輸入不人性化啦...,用struts2半天就可以搞定的一個表單用Swing恁是搞了一個星期,寫界面的痛苦啊。總之,Swing的界面開發是個大麻煩,項目完了以后將一些可重用的組件整理了一下,但還是發現界面代碼一大堆,極難維護,后來的項目只要客戶說C/S,我們也絕口不提C/S。

    后來在javaeye首頁上看到一家公司的富客戶端解決方案的廣告,進去看了看第一感觸就是這個框架的作者當時絕對和我一樣痛苦過,只不過他痛定思痛走的更遠了一些,能夠把控件封裝起來,把項目中常見的問題在框架中一并解決了,現在只是感嘆如果這個框架能在兩年前出現那該有多好啊!

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2008-05-07 18:13 by 寒武紀
    樓上的想法不錯,沒有具體實現過,Http invoker也是最近才曉得。希望能進一步深入了解。
    說起GUI的開發有強烈的同感,記得以前開發的第一個Swing項目的時候,項目不大,但是界面不少,表格、樹這些都需要用到。那時JDK和NetBean版本都很低,記得是1.4.X+4.1版本,Eclipse的VE太容易暴掉,所以就在NetBean那上面畫GUI,如果一個頁面控件多了NetBean里面的代碼就亂成一鍋粥。沒有辦法,在基本成型后就全部搬到Eclipse進行重構(工作量比較大)。最大的問題就是缺乏Application運行管理內核,想想當初為了一個打開--編輯--保存--關閉編輯模型的功能,以及像構建工具欄、狀態欄等這些基本框架,花了大量大量的時間和精力,還好,初出茅廬,有的就是精力,最后還是拼起來了。很多class都是上一二千行的,根本無法維護。后來轉去學習Eclipse RCP框架,感覺好多了,也成功在RCP平臺上構建了一個大型項目的應用。自從JDK6以后,Swing好像提升非常快,NetBean也開始支持RCP應用,不久還有Application框架,而且像SwingLab這些高級組件也挺不錯的。感覺以后開發Swing應該比原來要容易一些。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 19:09 by 銀河使者
    做C/S的客戶端不必非得用java吧,雖然Java是跨平臺的,在國內客戶端基本都是windows。個人認為客戶端用delphi、c++ builder、vb,甚至C#比較好,可以用java做服務端。java的swing、awt或是SWT做GUI遠不如delphi這些開發工具方便。如果非得要做的話,netbeans6.1提供的java gui比較好,layout也非常方便,大家可以試試。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 19:10 by 銀河使者
    我以前做過一個項目,客戶端就是用的delphi,服務端用的jsp+hibernate,效果很好。反正通訊用的都是tcp

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 22:42 by for_the_king
    還試圖用VB,VC,delphi做數據庫應用的人醒醒吧,就拿客戶端不能自動升級這一條就能讓我永遠不會考慮他們,這些語言或架構不適合做企業應用,如果還沒搞明白什么是企業應用,那我告訴你企業應用至少要有應用服務器。客戶端用delphi服務器端用jsp+hibernate通訊用TCP就更扯了,當然了every language can do everything,向你們的架構師的不畏復雜的精神和他這么有創意的架構致敬。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-07 22:46 by for_the_king
    在blogjava上搜到一篇文章http://www.tkk7.com/knight-glory-ggg/archive/2008/03/05/183984.html
    估計是這個框架的作者寫出來宣傳框架的,不過作者將Swing做數據庫應用面臨的問題說的很清楚,值得一讀。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-28 16:05 by 懶人
    @銀河使者
    有很多語言可以做客戶端的

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-28 17:42 by 銀河使者
    @懶人

    不是有很多語言,而是所有支持網絡技術(TCP協議)的語言或技術都可以做客戶端。包括flash、office。

    如果需要非常絢麗的效果,我看flash就很好,flash做動畫可以其他語言比不了的啊。而且flash的script也可以使用TCP協議。這就足夠了。如果誰用flash做一個msn或QQ的客戶端,那效果遠比msn或QQ要好的多了。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-28 17:52 by 銀河使者
    @for_the_king

    誰說delphi、vc做的東西不能自動升級。我不知道你用過瑞星或其他的殺毒軟件沒。也是用VC或其他的語言寫的,不是也可以自動升級。還有微軟的smallclient(智能客戶端),用C#或VB.net寫的C/S程序。不是也可以很好的自動升級嗎!至于通過tcp協議訪問,當然,用delphi做的程序不一定直接使用tcp。就象ajax可以使用json一樣,做個通用的映射組件,類似于web services,解決的方法非常多。

    但是web程序卻無法做到C/S的某些功能,至少很復雜。如做個樹、菜單。這些用delphi、vb,只要幾分鐘就可以做個很好的程序。還有更復雜的效果。
    最煩人的是web程序并不真正跨平臺,ie6、ie7、firefox都得單獨考慮。除非你可以強迫用戶必須使用自己指定的瀏覽器。而C/S程序則是真正意義上的跨平臺。(只限于windows,客戶端是非windows時除外),在win98、win2000、winxp,2003,vista,windows2008上,只要能運行起來,界面效果都一樣。


    至于什么是企業級應用,我認為沒有必要非得強調必須有什么,不能有什么。只要能滿足用戶的需要,其他的一切都不重要。主要得用戶滿意、然后才能老板滿意,最后才能自己滿意。

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2008-05-28 17:55 by 銀河使者
    另外,開發一個大的軟件系統不僅需要開發人員有團隊精神。所使用的技術也應團隊合作。沒有哪一種技術可以適合于所有的領域和應用。如進行數據遷移,就可以利用數據庫本身的技術,如sql server的DTS技術。

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2008-07-21 19:20 by lucky
    www.soyframework.com目前最好的RCP框架了,不防試試

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2013-03-06 23:16 by harrison
    怒頂樓主,查找了半天相關的文獻資料

    # re: B/S,C/S架構混合使用  回復  更多評論   

    2014-04-16 17:31 by Unbotrusive
    我同意“客戶端就是用的delphi,服務端用的jsp+hibernate”,效果確實很好。其實這個只要用上SOA 框架后,都能解決C/S 和B/S混合使用的問題。 只要在服務器上搭建能處理數據的SOA框架的處理服務,然后再搭建客戶端,直接利用服務器的數據,這樣就可以解決問題了。
    但是若按上面4樓的說法只用一種語言只得很麻煩,特別是JAVA 這種節目很差的語言。

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2014-10-02 15:42 by eagle
    可以幫我發個b/s和c/s混合架構的例子不?我們最近要做,我只用.net做過b/s架構的網站,現在要我負責這個混合結構的c,好愁喲,不知道該怎么弄,求助樓主大神,360082175@qq.com是我的QQ郵箱

    # re: B/S,C/S架構混合使用[未登錄]  回復  更多評論   

    2014-10-02 15:42 by eagle
    補充一下:用的語言是java,開發環境是eclipse

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 午夜理伦剧场免费| 亚洲精品无码久久毛片| 亚洲成人精品久久| 免费无码又爽又刺激毛片| 亚洲国产精品无码久久久不卡 | 一级毛片直播亚洲| 亚洲综合色在线观看亚洲| 久久亚洲精品国产精品婷婷| 最近免费mv在线观看动漫| 日韩精品成人亚洲专区| 成人区精品一区二区不卡亚洲| 无码人妻精品中文字幕免费| 国产国拍亚洲精品福利 | 精品一区二区三区高清免费观看 | 亚洲国产专区一区| 亚洲欧美日韩综合久久久久| 最好看最新的中文字幕免费| 亚洲日韩精品射精日| 免费国产黄网站在线看| 免费无码又爽又刺激毛片| ww亚洲ww在线观看国产| 中文字幕成人免费视频| 亚洲国产精品国自产拍AV| 国产99久久久久久免费看| 可以免费观看的一级毛片| 亚洲色偷偷色噜噜狠狠99网| 久草视频免费在线观看| 免费在线看片网站| 亚洲AV一区二区三区四区| 操美女视频免费网站| 亚洲人色大成年网站在线观看| 久操免费在线观看| 亚洲av中文无码乱人伦在线r▽| 久久最新免费视频| 在线日韩日本国产亚洲| 一级毛片在线播放免费| 亚洲国产精品无码久久久久久曰 | 国产成人精品免费直播| 亚洲av无码专区青青草原| 欧洲精品免费一区二区三区| 亚洲日韩av无码中文|