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

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

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

    聶永的博客

    記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

    為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇

    廣而告之

    使用socket.io作為跨瀏覽器平臺(tái)的實(shí)時(shí)推送首選,經(jīng)測試在各個(gè)主流瀏覽器上測試都確實(shí)具有良好的下實(shí)時(shí)表現(xiàn)。這里為推廣socketio-netty服務(wù)器端實(shí)現(xiàn)哈,做次廣告,同時(shí)預(yù)熱一下:

    socketio-netty : 又一款socket.io服務(wù)器端實(shí)現(xiàn),兼容0.9-1.0版本~

     

    示范目的

     

    我們要構(gòu)建一個(gè)在市面上常見瀏覽器上都可以正常運(yùn)行的集體聊天應(yīng)用,保證在IE6+,F(xiàn)irefox,Chrome,Safari,Opear,IOS,Android等可以正常運(yùn)轉(zhuǎn),根據(jù)具體環(huán)境自動(dòng)選擇最佳的通信通道。

    嗯,既然是跨瀏覽器平臺(tái),那自然選擇socket.io(客戶端js) 了。它也是本文的重心,本文的最終是讓socket.io(客戶端js) 版本在Phonegap包裝的Android Apk程序中可以使用Websocket協(xié)議,以達(dá)到快速交換數(shù)據(jù)的目的,提高交換性能。

    同時(shí)也保證我們的示范應(yīng)用盡可能的做到編寫一次,到處運(yùn)行哈。

    還好,有了socket.io(客戶端js) + socketio-netty(socket.io服務(wù)器端JAVA實(shí)現(xiàn)) + Phonegap, 我們構(gòu)建各種交互性非常強(qiáng)的的跨瀏覽器、跨移動(dòng)應(yīng)用的HTML應(yīng)用,是個(gè)不錯(cuò)的選擇。

    另,本文示范項(xiàng)目為僅僅為演示其功能,不保證樣式。

     

    Phonegap

    官網(wǎng)

    官網(wǎng)定義為:

    PhoneGap is an HTML5 app platform that allows you to author native applications with web technologies and get access to APIs and app stores.

    中文翻譯為:

    PhoneGap是一個(gè)開源的開發(fā)框架,使用HTML,CSS和JavaScript來構(gòu)建跨平臺(tái)的的移動(dòng)應(yīng)用程序

    可使用HTML + CSS + Javascript構(gòu)建跨平臺(tái)的移動(dòng)引用,確實(shí)很不錯(cuò),值得推薦。

    更棒的,可以利用其云構(gòu)建服務(wù)(https://build.phonegap.com/apps ) ,本機(jī)編寫好應(yīng)用之后(保證首頁為index.html,涉及到的css/js存放在一起),打包成zip,上傳,自動(dòng)會(huì)為我們自動(dòng)構(gòu)建不同平臺(tái)下的部署包,十分方便。

    表面上看,一切都很完美,但部署到Android系統(tǒng)之后,發(fā)現(xiàn)socket.io無法使用websocket雙向的通道,socket.io默認(rèn)采用xhr-long polling通信模式。有些無奈。

    在實(shí)時(shí)交互數(shù)據(jù)量很大的情況下,相比xhr-long polling, jsonp polling,Websocket/Flashsocket具有無法超越的速度優(yōu)勢,同時(shí)雙向數(shù)據(jù)傳輸通道,通過觀察可以很明顯的感覺到。

     

    起因

    1. 我的android系統(tǒng)是2.3的,其原生的瀏覽器不支持websocket通信協(xié)議(ucweb,qq,opear mini 等都支持較為完整的HTML5規(guī)范)。
    2. Phonegap轉(zhuǎn)換的APK包,會(huì)調(diào)用android內(nèi)置瀏覽器,因此導(dǎo)致websocket無法使用。
    3. 據(jù)調(diào)研Android 2/3.* 原生瀏覽器不支持websocket,至于Android 4.*,沒有測試過。

    如何確認(rèn)瀏覽器對html5的支持情況, 瀏覽器訪問 http://html5test.com 即可查詢對HTML5的支持情況,以及跑分等。

    嗯,據(jù)傳言,Phonegap會(huì)在2.0版本之后,添加對Android的websocket支持,但目前版本為1.7。

     

    解決方式

    animesh kumar 開發(fā)的websocket-android-phonegap項(xiàng)目,已經(jīng)做到了讓Phonegap支持websocket客戶端協(xié)議,使用java nio編寫websocket客戶端協(xié)議連接,同時(shí)Phonegap支持自定義組件,支持JS和JAVA代碼的相互調(diào)用開放架構(gòu),這樣就促成了偽裝的webscoket.js。

    其有些DWR的味道,但更為靈活。

    另外還有一個(gè)單純的socket.io android客戶端實(shí)現(xiàn):

    https://github.com/koush/android-websockets#readme

    有興趣者,可以參考一下。

    本打算使用Netty構(gòu)建一個(gè)websocket客戶端,然后結(jié)合js等,但有開源實(shí)現(xiàn),不再閉門造車。

    1. 在Eclipse中新建Android Project項(xiàng)目chatdemo
    2. animesh kumarwebsocket-android-phonegap項(xiàng)目java文件打成phonegap-websocket-support.jar包,存放在 android project的libs目錄下
    3. websocket.js存放在 assets/www/js目錄下
    4. 修改項(xiàng)目啟動(dòng)類App.java
    5. 添加<script src="js/websocket.js"></script>

     

    簡單說明

    1. App.java修改后:

    確保繼承DroidGap,并且指定綁定語句:

    // 綁定websocket支持

    appView.addJavascriptInterface(new WebSocketFactory(appView),

    "WebSocketFactory");

    JAVA端設(shè)定完畢。

    2. 客戶端的修改

    需要在html頁面端做些手腳,優(yōu)先加載websocket.js進(jìn)行一些環(huán)境變量的設(shè)定,這樣socket.io就可以檢測websocket的支持。

    websocekt.js的初始化代碼:

    需要注意其初始化代碼:

    // window object
    var global = window;

    // WebSocket Object. All listener methods are cleaned up!
    var WebSocket = global.WebSocket = function(url)

    ......

     

    socket.io client websocket 代碼片段:

    看一下websocket的檢測函數(shù):

    WS.check = function () {
      return ('WebSocket' in global && !('__addTask' in WebSocket))
            || 'MozWebSocket' in global;
    };

    很自然的,自定義的websocket.js 和 socket.io兩者就能夠很自然的銜接在一起了。

     

    因此,必須的頁面JS加載順序?yàn)椋?/p>

    <!--android平臺(tái)需要添加,其它移動(dòng)平臺(tái),比如ios則不需要 -->
    <!--一定要放在socket.io.min.js前面 -->
    <script src="js/websocket.js"></script>
    <script src="js/socket.io.min.js"></script>

    在HTML頁面端,我們僅僅需要添加一行<script src="js/websocket.js"></script>引用,就做到了讓android平臺(tái)下socket.io優(yōu)先選擇websocket,很簡單,也很使用。

    至于其它平臺(tái),則不需要考慮這么,僅僅把/chatdemo/assets/www目錄下打包成zip包(切記把<script src="js/websocket.js"></script>去除掉),上傳到云構(gòu)建平臺(tái)自動(dòng)構(gòu)建即可。

     

    小總結(jié)

    Phonegap下讓android平臺(tái)支持websocket,步驟很簡單:

    1. 在eclipse下搭建android project
    2. 拷貝jar以及socekt.js到相應(yīng)目錄
    3. 修改App.java(其它android啟動(dòng)類,方法名不一樣,但方法體一致)
    4. 在首頁或者需要的頁面,在 socket.io js醫(yī)用的前面,添加<script src="js/websocket.js"></script>引用即可

     

    示范代碼

    1. socket.io 框架內(nèi)置的chat聊天示范和socketio-netty所提供聊天示范完全一致,除了服務(wù)器端實(shí)現(xiàn)不同
    2. 簡單包裝成android項(xiàng)目,僅用于演示使用,因此界面有些大
    3. 需要一個(gè)服務(wù)器端,socket.io或者socketio-netty的都可以
    4. 本文Android示范chat下載 下載
    5. phonegap-websocket-support.jar

     

    參考資料

    1. Phonegap:
       http://phonegap.com/
    2. WebSocket support in Android’s Phonegap apps
      http://anismiles.wordpress.com/2011/02/03/websocket-support-in-android%E2%80%99s-phonegap-apps/

    3. websocket-android-phonegap
      https://github.com/anismiles/websocket-android-phonegap

    posted on 2012-05-10 14:10 nieyong 閱讀(24857) 評(píng)論(12)  編輯  收藏 所屬分類: socket.io

    評(píng)論

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2012-05-10 17:14 ge_star

    animesh kumar 開發(fā)的websocket-android-phonegap項(xiàng)目只支持DRAFT75/76的協(xié)議~對于目前的很多服務(wù)器不支持,例如tomcat7,tomcat7采用RCFRFC 6455,所以需要自己改握手和通訊協(xié)議  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2012-05-11 08:33 tb

    這個(gè)好啊 方便我們的手機(jī)開發(fā)  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2012-05-11 09:43 nieyong

    @ge_star
    采用Netty,或者http://socket.io,或者http://code.google.com/p/socketio-netty/
    或者,直接增加對RCFRFC 6455的支持等。  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2012-06-07 17:52 josh

    請教一下 我利用IFRAME 去崁入http://www.websocket.org/echo.html

    語法如下:
    <iframe src="http://www.websocket.org/echo.html" width="100%" height="100%" ></iframe>

    但卻出現(xiàn)不支援 可否請教原因  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2012-06-11 09:09 nieyong

    @josh
    您是什么平臺(tái) ?若是android,默認(rèn)的瀏覽器不支持websocket協(xié)議。  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇[未登錄] 2012-07-26 17:14 jarry

    socket.io client websocket 代碼片段:最后一部分貌似有問題?module不存在。。。(
    'undefined' != typeof io ? io.Transport : module.exports
    , 'undefined' != typeof io ? io : module.parent.exports
    , this
    )  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2012-08-29 10:35 零度火云

    感謝您詳細(xì)的方案,正好需要  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2013-05-28 18:33 FreezeSoul

    請問,為什么切換連接后會(huì)報(bào)超時(shí),但我本地用chrome打開是可以
    (注釋websocket.js)

    連接:http://192.168.23.1:9000/chat

    異常:DroidGap: TIMEOUT ERROR! - calling webViewClient
      回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2013-09-13 15:13 yimengyuanyun

    鏈接不上服務(wù)器,不明白為什么
    var s = new WebSocket("ws://127.0.0.1:8000/");
    這個(gè)url是服務(wù)器的端口嗎?為什么我這個(gè)就不可以呢  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2013-12-16 09:28 唐鑫

    為什么報(bào) has no method 'getintance'錯(cuò)呢?  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2014-07-02 16:19 馬躍

    為什么報(bào) has no method 'getintance'錯(cuò)呢? 我也遇到了同樣的問題  回復(fù)  更多評(píng)論   

    # re: 為Phonegap Android平臺(tái)增加websocket支持,使默認(rèn)成為socket.io首選通道選擇 2014-07-02 16:20 馬躍

    有解決的幫下忙好嗎  回復(fù)  更多評(píng)論   

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2012年6月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    最新隨筆

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲免费在线观看| 亚洲男人天堂2020| 成全视频在线观看免费| 亚洲国产精品无码中文lv| 亚洲一区精品中文字幕| 亚洲欧洲精品成人久久奇米网| 69成人免费视频无码专区| 99久久久国产精品免费蜜臀| 美女巨胸喷奶水视频www免费| 理论亚洲区美一区二区三区| 亚洲av无码电影网| 亚洲综合激情另类小说区| 日本亚洲视频在线| 亚洲无人区午夜福利码高清完整版| 国产成人免费ā片在线观看| 久久精品女人天堂AV免费观看| 久久精品无码专区免费青青| 国产精品免费高清在线观看| 久久国产免费直播| 9久久免费国产精品特黄| 一级毛片大全免费播放| 免费精品视频在线| 国产成人综合亚洲绿色| 亚洲国产成人久久一区二区三区| 亚洲一级高清在线中文字幕| 亚洲色av性色在线观无码| 久久精品国产亚洲av高清漫画| 亚洲AV日韩AV永久无码绿巨人| 亚洲愉拍99热成人精品热久久| 亚洲男人天堂2020| 亚洲色自偷自拍另类小说| 国产av无码专区亚洲av果冻传媒| 亚洲综合色视频在线观看| 国产成人综合亚洲AV第一页| 国产午夜亚洲精品午夜鲁丝片| 亚洲熟妇av一区二区三区漫画| 亚洲人精品午夜射精日韩| 久久国产亚洲电影天堂| 亚洲尹人九九大色香蕉网站| 亚洲蜜芽在线精品一区| 久久精品亚洲AV久久久无码|