SpringBoot集成websocket(4)|(使用okhttp3实现websocket)
章节
第一章链接: 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
*/
@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接口实现
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请求参数。文章来源:https://www.toymoban.com/news/detail-694960.html
第一章链接: SpringBoot集成websocket(1)|(websocket客户端实现)
第二章链接: SpringBoot集成websocket(2)|(websocket服务端实现以及websocket中转实现)文章来源地址https://www.toymoban.com/news/detail-694960.html
到了这里,关于SpringBoot集成websocket(4)|(使用okhttp3实现websocket)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!