前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot整合WebSocket

SpringBoot整合WebSocket

作者头像
全栈开发日记
发布2022-05-13 14:48:17
5270
发布2022-05-13 14:48:17
举报
文章被收录于专栏:全栈开发日记

什么是WebSocket?

WebSocket是一种网络通信协议。和HTTP协议一样,都是基于TCP协议来传输数据。

为什么需要WebSocket?因为有一些功能HTTP无法满足。

HTTP协议是一种无状态的、无连接的、单项的应用层协议。基于HTTP协议的通信请求只能由客户端发起,服务端对请求做出处理。这种通信模型有一个弊端,它无法实现服务器主动向客户端发起请求。

以微信举例,张三给李四发了一条消息,这条消息来到了服务器后无法给李四的客户端推送,只能等待李四去刷新客户端来询问服务器是否有新的消息。

怎么解决这种问题呢?

1、轮询:客户端定时向服务器发送请求,服务器会马上进行处理,并关闭连接。

2、长轮询:客户端向服务器发送HTTP请求,服务器接到请求后暂不返回响应信息,这时连接会一直保持,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。

3、长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。对于服务器的要求太高了。

4、WebSocket:在WebSocket出来之前,服务器想要给客户端主动推送消息的话,需要一直保持连接。而现在服务器已经知道的客户端的门牌号了,那么它们就不需要再保持联系了,服务器直接根据门牌号送货上门。

客户端实现

1、创建WebSocket对象

代码语言:javascript
复制
let ws=new WebSocket(url);

参数url格式说明:ws://IP地址:端口号/资源名称

2、WebSocket事件

事件

事件处理程序

描述

open

websocket对象.onopen

连接建立时触发

message

websocket对象.onmessage

客户端接收服务端数据时触发

error

websocket对象.onerror

通信发生错误时触发

close

websocket对象.onclose

连接关闭时触发

3、WebSocket方法

WebSocket对象的相关方法:

方法

描述

send()

使用连接发送数据

客户端具体编程

如下为Vue示例代码:

① 创建websocket对象

代码语言:javascript
复制
let ws=new WebSocket('ws://IP地址/接口');

② 给ws绑定事件

代码较多,不在这里显示了,公众号回复【WebSocket】拿源码。

③ 向服务器发送消息

代码语言:javascript
复制
// 判断当前与服务器的连接是否正常
if(this.socket.readyState===1){
   this.socket.send(msg);
}

服务端实现

服务端实现有两种方式:

1、编程式:

继承类javax.websocket.Endpoint并实现其方法。

2、注解式:

定义一个Component,并添加ServerEndpoint相关注解。

服务端具体编程

① POM依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

② 创建HttpSession配置

代码语言:javascript
复制
public class GetHttpSessionConfig extends ServerEndpointConfig.Configurator {
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        // 获取HttpSession对象
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        // 将httpSession对象存储到配置对象中
        sec.getUserProperties().put(HttpSession.class.getName(),httpSession);
    }
}

③ 创建配置类

代码语言:javascript
复制
@Configuration
public class WebSocketConfig {
    /**
     * 这个Bean的作用是自动注册使用了@ServerEndpoint注解的Bean
     * @author 二饭
     * @email 1786705138@qq.com
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}

④ 创建接口

代码较多,不在这里显示了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是WebSocket?
  • 客户端实现
    • 1、创建WebSocket对象
      • 2、WebSocket事件
        • 3、WebSocket方法
        • 服务端实现
          • 服务端具体编程
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档