现在使用场景中,我们看到直播中的实时的对话,采用这种的使用方式。
WebSocket 的使用的好处是:其目的是在WebSocket应用和WebSocket服务器进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高了工作效率和资源利用率。
在okhttp 中有封装WebSocket 的使用。
private void startConn() {
StringBuffer wsuri = new StringBuffer();
if (!TextUtils.isEmpty(mPin)) {
wsuri.append("&pin=" + mPin);
}
URI url = null;
try {
url = new URI(wsuri.toString());
} catch (URISyntaxException var4) {
var4.printStackTrace();
}
if (url != null && !this.mConnecting) {
mConnecting = true;
Request request = new Request.Builder().url(url.toString()).build();
okHttpClient.newWebSocket(request, new WebSocketListener() {
//当远程对等方接受Web套接字并可能开始传输消息时调用。
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
}
//由于从网络读取或向网络写入错误而关闭Web套接字时调用。
// 传出和传入的消息都可能丢失。 没有进一步的电话给这位听众。 @Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
//当收到文本(类型{@code 0x1})消息时调用
@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
}
//当收到二进制(类型为{@code 0x2})消息时调用。
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
super.onMessage(webSocket, bytes);
}
//当远程对等体指示不再有传入的消息将被传输时调用。
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
super.onClosing(webSocket, code, reason);
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
super.onClosed(webSocket, code, reason);
});
}
}
我们在实际的业务开发的时候,在开放的这几个接口中,实现自己的业务逻辑。
参考资料:
1 https://blog.youkuaiyun.com/sinat_36422236/article/details/85051547
2 https://www.jianshu.com/p/e294e6baa158