在android的webview中實現websocket

   先來嘮叨幾句websocket,顧名思義,websocket也是socket,用來通信的,只是用在web上,所以叫websocket。websocket是html5規範中的一項,在chrome、ff等主流瀏覽器中都已經支持。但是在我們android的原生瀏覽器卻……而android中的webview也是用的原生瀏覽器的核心,所以同樣悲劇。

   在websocket出現之後就有人開發了socket.io,這又是個啥呢?其實它就幹了一個事,就是封裝websocket,使得即使不支持websocket的平臺在調用socket.io時也能正常通信。而且在使用socket.io時,不管支不支持websocket,都只要一份代碼就可以。

   有了socket.io,我們就可以在android環境的webview當中使用socket通信了。但是,android並不支持websocket啊,socket.io到底是怎麼實現的socket通信呢?原來socket.io會在平臺不支持websocket的情況下使用其他的方式實現,比如:xhr、flashsocket。在android中,socket.io實現使用的就是xhr方式。

   xhr是實現了通信,但是與websocket相比,xhr的實現方式性能上還是不能比。那麼有沒有方式讓android也實現真正的websocket呢?有,有人就想出了迂迴的辦法:

   利用webview與頁面可以相會調用的特性,採用JAVA NIO將websocket實現了一遍,這下可就是貨真價實的socket了!


   其實已經有人實現了這種方式,而且只需要導入一些插件及修改極少的代碼即可採用socket.io的代碼在android的webview中實現websocket。

   項目github地址:https://github.com/koush/android-websockets#readme


下面我簡單講一下使用方法:

  1. 在Eclipse中新建Android Project項目

  2. 把animesh kumar的websocket-android-phonegap項目java文件(WebSocketFactory.java和WebSocket.java)打成jar包,存放在 android project的libs目錄下並導入工程

  3. 把websocket.js存放在 assets/www/js目錄下

  4. 修改項目啓動類App.java

    在App.java的onCreate方法中加入如下代碼:

    appView.addJavascriptInterface(new WebSocketFactory(appView), "WebSocketFactory");


  5. 添加<script src="js/websocket.js"></script>

   必須注意的是這行必須在加載socket.io.js之前加載







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章