SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
文章目录
- 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接口
@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*/@Overridepublic void onOpen(WebSocket webSocket, Response response) {super.onOpen(webSocket, response);log.info("内部 连接ws服务");}/*** 收到ws服务返回的数据** @param webSocket* @param text*/@Overridepublic 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, "");}}@Overridepublic 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接口实现
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中转实现)
相关文章:
SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
SpringBoot集成websocket(4)|(使用okhttp3实现websocket) 文章目录 SpringBoot集成websocket(4)|(使用okhttp3实现websocket)[TOC] 前言一、实现步骤1.实现步骤 二、websocket服务代…...
【MySQL】JDBC编程
MySQL-JDBC编程 文章目录 MySQL-JDBC编程Java的数据库编程JDBC工作原理JDBC的使用驱动包下载导入代码编写 Java的数据库编程 JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接…...
数据结构——二叉树线索化遍历(前中后序遍历)
二叉树线索化 线索化概念: 为什么要转换为线索化 二叉树线索化是一种将普通二叉树转换为具有特殊线索(指向前驱和后继节点)的二叉树的过程。这种线索化的目的是为了提高对二叉树的遍历效率,特别是在不使用递归或栈的情况下进行遍历…...
GO语言网络编程(并发编程)Channel
GO语言网络编程(并发编程)Channel 1、Channel 1.1.1 Channel 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态…...
c++day3
stack.h #ifndef STACK_H #define STACK_H #include <iostream> //#define max 128 using namespace std; class Stack { private:int* stack;//数组指针int top;//栈顶元素int max;//栈容量 public://构造函数Stack();//析构函数~Stack();//定义拷贝构造函数Stack(cons…...
算法通过村第六关-树青铜笔记|中序后序
文章目录 前言1. 树的常见概念2. 树的性质3. 树的定义与存储方式4. 树的遍历方式5. 通过序列构建二叉树5.1 前中序列恢复二叉树5.2 中后序列恢复二叉树 总结 前言 提示:瑞秋是个小甜心,她只喜欢被爱,不懂的去爱人。 --几米《你们 我们 他们》…...
C++动态内存管理+模板
💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…...
SQL 注入漏洞攻击
文章目录 1. 介绍2. 无密码登录3. 无用户名无密码登录4. 合并表获取用户名密码 1. 介绍 假设你用自己的用户名和密码登录了一个付费网站,网站服务器就会查询一下你是不是 VIP 用户,而用户数据都是放在数据库中的,服务器通常都会向数据库进行查…...
一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(四)
之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…...
Transformer 模型中常见的特殊符号
Transformer 模型中常见的特殊符号 通过代码一起理解一下 Transformer 模型中常见的特殊符号, 示例代码, special_tokens{unk_token: [UNK], sep_token: [SEP], pad_token: [PAD], cls_token: [CLS], mask_token: [MASK]}这段代码是定义了一个字典spec…...
C# halcon SubImage的使用
SubImage(HObject imageMinuend, HObject imageSubtrahend, out HObject imageSub, HTuple mult, HTuple add) 公式 x1imageMinuend此行此列的灰度 x2imageSubtrahend此行此列的灰度 则imageSub此行此列的灰度为;(x1-x2)*multadd 溢出裁剪 以byte图为例,小于0&a…...
每天几道Java面试题:异常机制(第三天)
目录 第三幕、第一场)异常机制面试题 友情提醒 背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第三幕、 第一场)异常机制面试题 【面试官老吉,面试官潘安,面试者…...
Linux 中的 chattr 命令及示例
Linux 中的chattr命令是一个文件系统命令,用于更改目录中文件的属性。该命令的主要用途是使多个文件无法被超级用户以外的用户更改。管理员表示,众所周知,Linux 是一个多用户操作系统,一个用户有可能删除另一个用户非常关心的文件。为了避免这种情况,Linux 提供了“ chatt…...
LeetCode 2605. Form Smallest Number From Two Digit Arrays【数组,哈希表,枚举;位运算】1241
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
VoxWeekly|The Sandbox 生态周报|20230904
欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区…...
antd setFieldsValue 设置初始值无效AutoComplete 设置默认值失败
antd form setFieldsValue 设置初始值无效 解决方案 setTimeout(()>{setFieldsValue(values)},100)antd AutoComplete 设置默认值失败 defaultValue 设置无效 解决方案 设置value,搭配onChange来设置修改...
01-Redis核心数据结构与高性能原理
上一篇: 1.Redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz…...
预防Dos攻击
Dos----拒绝服务攻击,一般是构造特殊的输入,使得后台的处理耗时远超正常水平,随着请求越来越多,后台服务越发疲于奔命,最后因资源耗尽,无法再接受新的请求,最终造成拒绝服务的效果。 特殊输入例…...
ant design的文档真的是一坨屎
很多基础设置 高傲的写都不写 要自己去index.d.ts里查 这就算了,为什么还有错的。。。。。 即使因为版本号而不同,起码把差异说明一下吧,直接丢个错的什么意思,。。。。。。。。 没点子功夫还真用不了 文档 进度条 Progress -…...
关于迁移学习的一点理解
举个栗子,老虎图片的数量非常少,可以让网络先学会识别猫的图片 1、预训练模型 内容:利用在 ImageNet1000 数据集训练好的模型,将所需的模型参数下载,嵌入到对应的网络架构中,使用对预训练模型的搭建。目前P…...
4个步骤让普通用户实现黑苹果EFI自动生成:OpCore Simplify智能工具全解析
4个步骤让普通用户实现黑苹果EFI自动生成:OpCore Simplify智能工具全解析 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 如何用智能工具解…...
新手必看!Quartus II 10.0 + DE2-115开发板从安装到点亮LED的完整避坑指南
Quartus II 10.0 DE2-115开发板从安装到点亮LED的完整避坑指南 第一次接触FPGA开发时,我盯着DE2-115开发板上密密麻麻的接口和Quartus II复杂的界面,完全不知道从何下手。直到经历了无数次驱动安装失败、管脚分配错误和编译报错后,才终于让第…...
告别Charles/Fiddler抓包失败:用Magisk TrustUserCerts模块搞定安卓HTTPS拦截
安卓HTTPS抓包全攻略:从Magisk证书安装到防御绕过实战 移动应用安全测试中,HTTPS流量拦截是基础却关键的环节。随着Android系统安全机制的不断升级,传统的抓包方法在Android 7.0及更高版本上频频失效。本文将系统性地介绍基于Magisk的解决方案…...
JVM堆内存泄漏排查:从-Xmx设置到hprof文件分析的完整避坑指南
JVM堆内存泄漏排查:从参数配置到实战分析的完整方法论 最近在排查一个线上服务的内存泄漏问题时,我发现很多开发者对JVM内存问题的处理还停留在"遇到OOM就重启服务"的初级阶段。实际上,一套系统化的内存排查方法论不仅能快速定位问…...
Excel 技巧:一键批量填充空值
🚀 操作步骤选中区域首先,用鼠标选中包含空值的目标数据区域。定位空值按下快捷键 Ctrl G 打开“定位”对话框:点击左下角的 「定位条件...」。选择 「空值」。点击「确定」。✅ 此时,区域内所有空白单元格已被高亮选中。输入公式…...
用U8g2库玩转OLED:Arduino显示动态变量+自定义图标的5个实用技巧
用U8g2库玩转OLED:Arduino显示动态变量自定义图标的5个实用技巧 在嵌入式开发中,OLED显示屏因其高对比度、低功耗和紧凑尺寸成为物联网设备和交互式项目的首选。U8g2库作为Arduino平台上最强大的显示驱动库之一,其灵活性和功能丰富性远超基础…...
冥想第一千八百三十三天(1833)
1.昨天晚上电动车刹车终于修好了,刹车更紧了,今天的天气很热了,明天就还薄款的运动衣。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。...
中国举办,IEEE会议,录用率39.5%!CCF推荐学术会议(C)截稿提醒
►►►Globecom 2026IEEE Global Communications Conference (GLOBECOM), a flagship IEEE Communications Society event, gathers top experts to drive innovation and advance nearly every aspect of communications technology. Each year, thousands of the most ground…...
终极指南:如何用 YahooFinanceApi 快速获取免费金融数据
终极指南:如何用 YahooFinanceApi 快速获取免费金融数据 【免费下载链接】YahooFinanceApi A handy Yahoo! Finance api wrapper, based on .NET Standard 2.0 项目地址: https://gitcode.com/gh_mirrors/ya/YahooFinanceApi 你是否正在寻找一个简单、免费且…...
Python实战:用Statsmodels搞定简单线性回归(附NO浓度预测案例)
Python实战:用Statsmodels搞定简单线性回归(附NO浓度预测案例) 在数据分析领域,线性回归是最基础却最实用的统计方法之一。无论你是市场分析师预测销售额,还是环境科学家研究污染物分布,掌握线性回归都能让…...
