WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能。更多知识参考:如何理解 TCP/IP, SPDY, WebSocket 三者之间的关系?
今天的重点是讲如何在Android中脱离WebView使用WebSocket,而不是在Web浏览器使用,如果是在Web浏览器中使用,网上已经太多教程、框架和demo,没必要讲。
到目前为止我个人认为安卓端比较好用的WebSocketClient有:autobahn、AndroidAsync、Java-WebSocket。好不好用其实需要看实际需求而定,此处我选择Java-WebSocket。
一、Android客户端的创建(使用Java-WebSocket库):
1、其实只需要掌握一个类,WebSocketClient即可
images/loading.gif' data-original="data:image/png;base64,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" />
2、指定IP/域名和端口连接服务器,当服务器端有通知时会回调onMessage方法
4、连接后就可以发送消息了,发送消息也很简单,除了支持String的发送还支持byte发送,好了,客户端就这么愉快的写完了(详细代码见后面打包的demo)。
二、服务端的创建:
1-1、Java Application服务端创建(使用Java-WebSocket库),其实也很简单,就继承一个类WebSocketServer:
2-1、Java Web(tomcat)服务端创建,这里不使用Java-WebSocket库,直接使用Java API javax.websocket包中的WebSocket相关类(注意Java API只实现了标准的RFC 6455(JSR256),如果你非要选择其它早期草案则需要用Java-WebSocket来实现,在Java-WebSocket中连接协议“Draft_17”就是标准的RFC 6455(JSR256),另外要使用Java API javax.websocket包中的WebSocket相关类要求JDK7及以上,Tomcat 7.0.49及以上):
1-2、Java后台对应的Android客户端
2-1、Java Web后台:
2-3、html前端(浏览器):