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

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

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

    狂奔 lion

    自強不息

    淺談Java中的通信機制及與C/C++ API的集成(上)

    背景:
    對于舊有系統(tǒng)的改造和升級,最苦惱的莫過于跨平臺,跨語言。我的一個朋友最近從Java專向了專攻.NET——因為.NET的CLR既有類似Java虛擬機概念這種已經(jīng)被證明很成功的底層托管能力。又對于Windows的就有桌面應(yīng)用提供了良好的兼容。
    最近我的一個個人項目也面臨著這樣的需求。一個C語言開發(fā)的中間件,通過API暴露給二次開發(fā)及插件應(yīng)用。現(xiàn)在由于對其應(yīng)用的需求變得日趨復(fù)雜,而且正在脫離Unix的管理環(huán)境,走向基于JWS這樣的BCS管理。有朋友推薦我用JNI,但這樣一是增加了耦合度,二是讓Java睡在JNI感覺不太安穩(wěn)。在認(rèn)知了上下兩層的系統(tǒng)平臺后,問題變得明朗起來:如何在HTTP協(xié)議下實現(xiàn)Java和C之間的交互?
    思路:
    本人對Java比較熟悉,先從Java的角度入手,Java間的通信方法:
    1 通過URL,Applet/JWS訪問被影射到URL的動態(tài)資源(Servlet)
    2 通過URL,Applet/JWS訪問共享的靜態(tài)資源(Server定期更新靜態(tài)資源)
    3 通過序列化和反序列化,實現(xiàn)簡單對象的傳輸(比如Resin的Hessian框架就提供了這種通信的方式)
    4 通過一些工具做代碼生成,利用Web Services實現(xiàn)客戶端和服務(wù)端的交互
    此外脫離HTTP,還可以做RMI,socket編程

    現(xiàn)在問題是通信的一端由Java變成了C/C++, 于是, 解決方案1需要把動態(tài)資源由CGI來定義,而方案3變得不再適用。于是方案有:
    1 通過URL,Applet/JWS訪問被影射到URL的動態(tài)資源(CGI)
    2 通過URL,Applet/JWS訪問共享的靜態(tài)資源(Server定期更新靜態(tài)資源)
    3 通過一些工具做代碼生成,利用Web Services實現(xiàn)客戶端和服務(wù)端的交互(×××這是我們討論的重點×××)

    解決方案:
    現(xiàn)在針對上文提出的3中通信方式中的1和3談一談實現(xiàn)的方法,2的實現(xiàn)方案比較靈活,需要發(fā)揮大家的想象力了:)
    針對CGI:
    首先CGI可以配置在各種主流的服務(wù)器中作為后端的腳本運行。大家可能對Servlet更熟悉一些。
    CGI可以用腳本寫,也可以用C來實現(xiàn)。CGI被觸發(fā)后,通過系統(tǒng)的環(huán)境變量來獲得輸入,在處理完畢后向標(biāo)準(zhǔn)輸出中輸出結(jié)果。
    由此可以想見,Web服務(wù)器在接受到來自HTTP協(xié)議的請求后,首先把請求的參數(shù)獲取到,然后設(shè)置到環(huán)境變量里。
    根據(jù)對訪問的URL的解析和服務(wù)器自身的配置,找到服務(wù)于請求的CGI程序的位置,然后執(zhí)行這個程序。
    這個程序被執(zhí)行后通過環(huán)境變量得到了服務(wù)器先前設(shè)置在環(huán)境變量中的參數(shù)。在經(jīng)過一些復(fù)雜的邏輯操作后,向標(biāo)準(zhǔn)輸出輸出結(jié)果。
    這個輸出又被Web服務(wù)器所捕獲,轉(zhuǎn)而傳遞回請求的客戶端。
    更多關(guān)于CGI的知識和理解,大家可以通過google來尋找答案

    上述CGI的方式可以讓我們直接獲取到結(jié)果,但是方案比較原始和基礎(chǔ)。其缺點有:
    1 需要自己制定類型傳輸協(xié)議,做封裝和拆封,否則只支持字符串
    2 我們不會為了要用C的API就給它裝一個或者自己實現(xiàn)一個Web服務(wù)器的,這讓我們的底層程序顯得蠢笨而冗余。我們希望能有一個超薄的Server外殼,
    在對API封裝后,通過某個端口進(jìn)行開放即可。

    針對Web Servcies:
    Based on上面的兩個不足,我們只能把希望寄托在Web Services身上了,
    筆者在這里推薦給大家的是在C/C++很著名的Web Services工具gSOAP。大家可以到http://gsoap2.sourceforge.net/上去下載這個工具。
    通過這個工具,我們可以做到:
    1 一個Stand-alone的服務(wù)器外殼
    2 一個根據(jù)API程序自動生成的Web Services服務(wù)
    3 一個WSDL描述符文件

    有關(guān)基于gSOAP的Web Services C服務(wù)端和Java客戶端的運行機理,及通過Java客戶端訪問gSOAP的Web Services的過程中需要注意的問題(筆者費了一天周折才搞清楚),將在下一篇中描述

    廣告時間:
    本人是哈工大的研究生,明年7月畢業(yè)。正在找工作,如果有工作機會,別忘了通知小弟哦(contactyang@163.com)

     @2008 楊一. 版權(quán)所有. 保留所有權(quán)利

    posted on 2007-12-04 17:33 楊一 閱讀(2040) 評論(0)  編輯  收藏 所屬分類: Java SE

    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導(dǎo)航

    公告

    本人在blogjava上發(fā)表的文章及隨筆除特別聲明外均為原創(chuàng)或翻譯,作品受知識產(chǎn)權(quán)法保護(hù)并被授權(quán)遵從 知識分享協(xié)議:署名-非商業(yè)性使用-相同方式共享 歡迎轉(zhuǎn)載,請在轉(zhuǎn)載時注明作者姓名(楊一)及出處(m.tkk7.com/yangyi)
    /////////////////////////////////////////
    我的訪問者

    常用鏈接

    留言簿(5)

    隨筆分類(55)

    隨筆檔案(55)

    相冊

    Java

    其他技術(shù)

    生活

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    自強不息


    用心 - 珍惜時間,勇于創(chuàng)造
    主站蜘蛛池模板: 亚洲精品在线免费看| 国产成人精品曰本亚洲79ren| 亚洲av福利无码无一区二区| 一级特黄aaa大片免费看| 亚洲成a人片在线观看老师| 国产精品亚洲一区二区在线观看 | 国产免费一区二区三区在线观看| 亚洲日韩人妻第一页| fc2免费人成为视频| 在线亚洲精品自拍| a毛片久久免费观看| 久久精品国产亚洲夜色AV网站| 最近免费中文字幕MV在线视频3| 亚洲AV无码精品色午夜果冻不卡| 两个人看的www免费视频中文| 亚洲精品国产品国语在线| 大地影院MV在线观看视频免费| 色婷婷亚洲十月十月色天| 亚色九九九全国免费视频| 亚洲伊人久久大香线蕉AV| 免费中文字幕不卡视频| 中文字幕不卡免费视频| 亚洲视频在线免费观看| 全免费毛片在线播放| 羞羞视频免费观看| 亚洲精品中文字幕乱码三区| 四虎成人精品永久免费AV| 亚洲国产系列一区二区三区| 亚洲高清视频一视频二视频三| 中文永久免费观看网站| 亚洲欧洲精品一区二区三区| 成人免费无码大片A毛片抽搐色欲| 免费在线观看自拍性爱视频| 亚洲午夜无码久久久久| 亚洲成人免费电影| 爱情岛论坛亚洲品质自拍视频网站 | 国产亚洲一区二区三区在线| 久久www免费人成看片| 小说专区亚洲春色校园| 亚洲日本va中文字幕久久| 天天影视色香欲综合免费|