SpringBoot集成websocket(4)|(使用okhttp3实现websocket)

SpringBoot集成websocket(4)|(使用okhttp3实现websocket)


### 文章目录

  • [SpringBoot集成websocket(4)|(使用okhttp3实现websocket)](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [@[TOC]](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [前言](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [一、实现步骤](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [1.实现步骤](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [二、websocket服务代码实现](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [1.WebSocketListener 实现](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [2.调用实现](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)
  • [总结](#文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket) @[TOC] 前言 一、实现步骤 1.实现步骤 二、websocket服务代码实现 1.WebSocketListener 实现 2.调用实现 总结)

章节

第一章链接: SpringBoot集成websocket(1)|(websocket客户端实现)

第二章链接: SpringBoot集成websocket(2)|(websocket服务端实现以及websocket中转实现)

前言

HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽。OkHttp是一个高效的HTTP客户端,它有以下默认特性:

支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接

连接池减少请求延时

透明的GZIP压缩减少响应数据的大小

缓存响应内容,避免一些完全重复的请求

请求失败时自动重试主机的其他 IP,自动重定向

当握手失败时会回退到TLS 1.0

一、实现步骤

1.实现步骤

1、构建OkHttpClient配置初始化一些参数。

2、使用WebSocket的Url地址连接。

3、设置WebSocket的连接状态回调和消息回调。

4、解析消息json处理业务等。

5、连接成功后,使用WebSocket发送消息

二、websocket服务代码实现

1.WebSocketListener 实现

springboot连接WS接口

c 复制代码
@Slf4j
public class SparkChatInnerServer extends WebSocketListener {

    public StringBuilder stringBuilder;
    public Boolean wsCloseFlag;

    // 构造函数
    public SparkChatInnerServer(Boolean wsCloseFlag) {
        this.wsCloseFlag = wsCloseFlag;
        this.stringBuilder = new StringBuilder();
    }

    /**
     * 开启连接
     *
     * @param webSocket
     * @param response
     */
    @Override
    public void onOpen(WebSocket webSocket, Response response) {
        super.onOpen(webSocket, response);
        log.info("内部 连接ws服务");
    }

    /**
     * 收到ws服务返回的数据
     *
     * @param webSocket
     * @param text
     */
    @Override
    public void onMessage(WebSocket webSocket, String text) {
        log.debug("收到的数据:{}", text);
        JsonParse myJsonParse = JSON.parseObject(text).toJavaObject(JsonParse.class);
        if (myJsonParse.header.code != 0) {
            log.error("发生错误,错误码为:{}", myJsonParse.header.code);
            log.error("本次请求的sid为:{}", myJsonParse.header.sid);
            wsCloseFlag = true;
            webSocket.close(1000, "");
        }
        List<Text> textList = myJsonParse.payload.choices.text;
        for (Text temp : textList) {
            stringBuilder.append(temp.content);
        }
        if (myJsonParse.header.status == 2 || myJsonParse.payload.choices.status == 2) {
            wsCloseFlag = true;
            webSocket.close(1000, "");
        }
    }

    @Override
    public void onFailure(WebSocket webSocket, Throwable t, Response response) {
        wsCloseFlag = true;
        super.onFailure(webSocket, t, response);
        try {
            if (null != response) {
                int code = response.code();
                log.error("会话异常:code:{},body:{}", code, response.body().string());
                if (101 != code) {
                    System.out.println("connection failed");
                }
            }
        } catch (IOException e) {
            log.error("会话异常:{}", e.getMessage());
        }
    }

}

2.调用实现

springboot提供对外的websocket接口实现

c 复制代码
   public String sparkQueryBase(String sendparam, String chatUrl) throws Exception {
        String url = AuthUtils.assembleRequestUrl(chatUrl, websocketConfigConst.apiKey, websocketConfigConst.apiSecret, "GET");
        OkHttpClient client = new OkHttpClient.Builder().build();
        Request request = new Request.Builder().url(url).build();
        SparkChatInnerServer sparkChatInnerServer = new SparkChatInnerServer(false);
        WebSocket webSocket = client.newWebSocket(request, sparkChatInnerServer);
        webSocket.send(sendparam);
        // 获取返回结果
        int i = 0;
        while (true) {
            Thread.sleep(100);
            if (sparkChatInnerServer.wsCloseFlag) {
                break;
            }
            if (i > 120) {
                log.error("ws服务连接超时,无法进行问题收集");
                break;
            }
            i++;
        }
        webSocket.close(1000, "");
        return sparkChatInnerServer.stringBuilder.toString();
    }

总结

本文主要介绍OkHttp3 实现websocket客户端,同时通过请求服务手机websocket请求参数。

第一章链接: SpringBoot集成websocket(1)|(websocket客户端实现)

第二章链接: SpringBoot集成websocket(2)|(websocket服务端实现以及websocket中转实现)

相关推荐
raoxiaoya1 小时前
同时安装多个版本的golang
开发语言·后端·golang
考虑考虑3 小时前
go使用gorilla/websocket实现websocket
后端·程序员·go
李少兄3 小时前
解决Spring Boot多模块自动配置失效问题
java·spring boot·后端
Piper蛋窝4 小时前
Go 1.19 相比 Go 1.18 有哪些值得注意的改动?
后端
码农BookSea4 小时前
不用Mockito写单元测试?你可能在浪费一半时间
后端·单元测试
他҈姓҈林҈4 小时前
Spring Boot 支持政策
spring boot
codingandsleeping5 小时前
Express入门
javascript·后端·node.js
ss2735 小时前
基于Springboot + vue + 爬虫实现的高考志愿智能推荐系统
spring boot·后端·高考
两点王爷5 小时前
springboot项目文件上传到服务器本机,返回访问地址
java·服务器·spring boot·文件上传
专注API从业者6 小时前
《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
开发语言·后端·爬虫·golang