使用OkHttp实现推送功能

思路分析

  1. 使用OkHttpClient#newWebSocket建立长连接;
  2. 监听连接成功事件(WebSocketListener#onOpen);
  3. 连接成功后使用WebSocket#send向服务端发送数据;
  4. 需要结束时使用WebSocket#close关闭长连接。

实现代码

OkHttpClient client = new OkHttpClient.Builder().build();
Request request = new Request.Builder()
        .url("ws://***")
        .build();
client.newWebSocket(request, new WebSocketListener() {
    @Override
    public void onOpen(WebSocket webSocket, Response response) {
        // 连接成功后向服务端发送数据(比如注册渠道)
        String json = "{***}"
        webSocket.send(json);
    }

    @Override
    public void onMessage(WebSocket webSocket, String text) {
        // 接收到推送的文本数据
    }

    @Override
    public void onMessage(WebSocket webSocket, ByteString bytes) {
        // 接收到推送的二进制数据
    }

    @Override
    public void onClosing(WebSocket webSocket, int code, String reason) {
        // 推送正在关闭
    }

    @Override
    public void onClosed(WebSocket webSocket, int code, String reason) {
        // 推送已关闭
    }

    @Override
    public void onFailure(WebSocket webSocket, Throwable t, Response response) {
        // 推送连接失败
    }
});

推荐阅读更多精彩内容