- 什么是webSocket?
ws是一个协议,归属于IETF。
- HTTP是运行在TCP协议传输层上的应用协议,而ws是通过HTTP协议协商如何连接,然后独立运行在TCP协议传输层上的应用协议。
- ws是一个持久化的协议,相对于HTTP这种非持久的协议来说。
- ws约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信
- 使用webSocket的特性:
为了更好、更灵活,轻量的与服务器通讯。因为ws提供了简单的消息规范,可以更快的适应长连接的环境,其实现在HTTP协议自身就可以做,但是不太轻便。
ws最大的特点就是实现全双工通信:客户端能够实时推送消息给服务端,服务端也能够实时推送消息给客户端。
ws可以做聊天室,股票实时价格显示等应用
- 使用webSocket:
一般在使用ws的过程中,很多时候,ws的断开连接,都是异常情况
但是对于状态回调基本上都是主动断开
1.正常情况断开 方法回调处理 调用onClose()
2.异常情况断开 心跳检测 一般ws就已经包含了该协议,当有异常的时候,直接调用 onError()
依赖:
//WebSocket
implementation 'org.java-websocket:Java-WebSocket:1.3.0
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private WebSocketClient webc;
private Draft connDraft=new Draft_17();// 连接协议
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//连接成功后给服务器发送消息
//webc.send("hello word");
setListener();
}
/**
* 建立长连接
*/
private void setListener() {
try {
initClient();
} catch (Exception e) {
e.printStackTrace();
}
}
private void initClient() throws Exception {
//执行初始化
webc = new WebSocketClient(new URI("接口地址"),connDraft) {
@Override
public void onOpen(ServerHandshake arg0) {
//连接成功执行的方法
Log.e(TAG, "onMessage: --"+"成功---"+arg0 );
}
@Override
public void onMessage(String message) {
//服务器推送的数据
//可以发广播,或消息
String s = message.toString();
Log.e(TAG, "onMessage: --"+"数据json--"+s );
}
@Override
public void onError(Exception error) {
//连接服务器异常执行这里
Log.e(TAG, "onMessage: --"+"连接服务器异常---"+error );
}
@Override
public void onClose(int code,String reason, boolean remote) {
//连接断开执行的方法
}
};
webc.connect();
}
@Override
protected void onDestroy() {
super.onDestroy();
webc.close();//关闭长连接
}
}