简介
WebSocket协议是一种建立在TCP连接基础上的全双工通信的协议。
全双工就是指客户端和服务端可以同时进行双向通信,强调同时、双向通信.
关于WebSocket协议,一般来说,如果是通过https协议开始升级而来的,那么一般是wss://开头,如果是http协议开始升级而来的,那么一般是ws://开头
在安卓上,一般有两种方式去实现websocket
okhttp以及Java-WebSocket
https://github.com/TooTallNate/Java-WebSocket
Java-WebSocket使用
首先添加引用
compile "org.java-websocket:Java-WebSocket:1.3.4"
代码调用
Draft_6455 draft_17 = new Draft_6455();
URI uri = URI.create("ws://xxx.com");
WebSocketClient webSocketClient = new WebSocketClient(uri, draft_17) {
@Override
public void onOpen(ServerHandshake handshakedata) {
Log.d(TAG, "run() returned: " + "连接到服务器");
}
@Override
public void onMessage(String message) {
Log.d(TAG, "run() returned: " + message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
// tv_title.setText("未连接");
Log.d(TAG, "onClose() returned: " + reason);
}
@Override
public void onError(Exception ex) {
Log.d(TAG, "onError() returned: " + ex);
// tv_title.setText("连接异常");
}
};
webSocketClient.connect();
注意,连接中使用的new Draft_17()就是使用的协议version 17(RFC 6455),Tomcat 7.0使用的协议版本为RFC 6455。
总结websocket的利弊
优点:
与socket相比,可以节省额外的端口占用,直接使用一个公网域名访问。
另外协议对报文的流量消耗做了优化。
缺点:
毕竟websocket底层也是socket连接,因而当大并发用户连接时目测会消耗较多资源。
另外在一些情况下(比如网络异常)websocket端开连接但并没有走到error回调中,如果配合心跳包发送会更好