先來嘮叨幾句websocket,顧名思義,websocket也是socket,用來通訊的,只是用在web上,因此叫websocket。websocket是html5規範中的一項,在chrome、ff等主流瀏覽器中都已經支持。可是在咱們android的原生瀏覽器卻……而android中的webview也是用的原生瀏覽器的核心,因此一樣悲劇。html
在websocket出現以後就有人開發了socket.io,這又是個啥呢?其實它就幹了一個事,就是封裝websocket,使得即便不支持websocket的平臺在調用socket.io時也能正常通訊。並且在使用socket.io時,無論支不支持websocket,都只要一份代碼就能夠。
html5
有了socket.io,咱們就能夠在android環境的webview當中使用socket通訊了。可是,android並不支持websocket啊,socket.io究竟是怎麼實現的socket通訊呢?原來socket.io會在平臺不支持websocket的狀況下使用其餘的方式實現,好比:xhr、flashsocket。在android中,socket.io實現使用的就是xhr方式。
java
xhr是實現了通訊,可是與websocket相比,xhr的實現方式性能上仍是不能比。那麼有沒有方式讓android也實現真正的websocket呢?有,有人就想出了迂迴的辦法:android
利用webview與頁面能夠相會調用的特性,採用JAVA NIO將websocket實現了一遍,這下可就是貨真價實的socket了!
git
其實已經有人實現了這種方式,並且只須要導入一些插件及修改極少的代碼便可採用socket.io的代碼在android的webview中實現websocket。
github
項目github地址:https://github.com/koush/android-websockets#readmeweb
下面我簡單講一下使用方法:chrome
在Eclipse中新建Android Project項目瀏覽器
把animesh kumar的websocket-android-phonegap項目java文件(WebSocketFactory.java和WebSocket.java)打成jar包,存放在 android project的libs目錄下並導入工程websocket
把websocket.js存放在 assets/www/js目錄下
修改項目啓動類App.java
在App.java的onCreate方法中加入以下代碼:
appView.addJavascriptInterface(new WebSocketFactory(appView), "WebSocketFactory");
添加<script src="js/websocket.js"></script>
必須注意的是這行必須在加載socket.io.js以前加載