基于OKHttp的websocket封装使用

本文介绍了如何在Android中使用OkHttp封装WebSocket,实现持续长连接并按需关闭。内容包括封装源码解析,WebSocket协议的客户端申请升级、服务端响应升级以及数据帧的详细说明,以及返回数据的处理。在每个任务结束后,通过调用特定方法关闭当前WebSocket连接,以减少服务器并发连接数。
摘要由CSDN通过智能技术生成


Demo源码请点击(网络库中websocket部分)

1.背景

一般使用到websocket协议的应用场景都是持续保持长连接,直到业务处理完毕,不再需要保持连接时,则close掉连接。那么官方给出的指导使用文档足咦。我近期工作上接到的任务是,通过websocket协议,流式接收数据。一次任务结束后要求关掉连接,下次任务再重新建立连接。要求减少服务器并发连接数,忽略建立连接的资源消耗。所以本篇文章是介绍再实例化连接的client之后,不关闭分发执行service的前提下,每次都新建websocket连接。整个源码放在了我封装的网络请求框架里。

2.源码解析

2.1基础封装

public class WebSocketClient {
   
    private Request request;
    private OkHttpClient client;
    private WebSocket webSocket;

    public WebSocketClient() {
   
        client = new OkHttpClient();
        request = new Request.Builder()
                .url("ws://echo.websocket.org")
                .build();
    }

    public OkHttpClient getClient() {
   
        return client;
    }

    public void start(WebSocketListener listener) {
   
        client.dispatcher().cancelAll();
        HLogger.d("request id = " + request.toString());
        HLogger.d("listener id = " + listener.toString());
        webSocket = client.newWebSocket(request, listener);
        HLogger.d("webSocket id = " + webSocket.toString());
    }

    public void close() {
   
        if (webSocket != null) {
   
            webSocket.close(1000, null);
        }
        client.dispatcher().executorService().shutdown();
    }
}

以上是对Request、OkHttpClient、WebSocket的封装。基本保证只实例化一份Request、OkHttpClient,每次新任务newWebSocket。回调listener可以复用。

2.2使用

	HsjWebSocketListener listener = new HsjWebSocketListener();
    StringBuilder stringBuilder = new StringBuilder();
    
    public void initSocket(View view) {
   
        webSocketClient = new WebSocketClient();
    }
    
    public void webSocket(View view) {
   
        if (webSocketClient == null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值