SpringBoot中websocket的使用

最近看到websocket相关内容, 记录一下SpringBoot和websocket的简单使用

1 WebSocket诞生

经典的问题: 有了HTTP协议, 为什么还需要WebSocket协议.

因为HTTP协议需要客户端向服务端发起请求, 服务端才能响应数据, 服务端不能主动向客户端通信. 在一些场景下, 需要服务端向客户端发起通信, 推送数据, 所以WebSocket协议诞生了.

2 WebSocket的简介

WebSocket 协议在2008年诞生,2011年成为国际标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

其主要的特点是: 允许服务器主动发送信息给客户端.

使用场景:

  • 聊天室
  • 消息推送

3 WebSocket的使用

1 准备一个SpringBoot环境
2 添加WebSocket配置
@Configuration
public class websocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
3 添加服务端WebSocket类
@Component
@Slf4j
@ServerEndpoint(value = "/test/{userId}")
public class SocketTest {
    
    private String userId;

    // 连接时执行
    @OnOpen
    public void onOpen(@PathParam("userId") String userId, Session session) throws IOException {
        this.userId = userId;
        log.info("新连接:{}", userId);
    }

    // 关闭时执行
    @OnClose
    public void onClose() {
        log.info("连接:{} 关闭", this.userId);
    }

    // 收到消息时执行
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        log.info("收到用户{}的消息{}", this.userId, message);
        session.getBasicRemote().sendText("收到 " + this.userId + " 的消息 "); //回复用户
    }

    // 连接错误时执行
    @OnError
    public void onError(Session session, Throwable error) {
        log.info("用户userId为:{}的连接发送错误", this.userId);
        error.printStackTrace();
    }

}
4 启动项目, 使用在线工具模仿前端调用WebSocket

在线工具: http://coolaf.com/tool/chattest

5 查看数据

以本地为例:

访问: ws://localhost:8080/test/user001

// 输入地址,点击连接,看到控制台 输出新建连接
// 发送哈哈到后台, 看到控制台 收到用户的哈哈
// 断开连接, 看到控制台,断开连接

// 新连接:user001
// 收到用户user001的消息哈哈
// 连接:user001 关闭

参考资料:

https://www.ruanyifeng.com/blog/2017/05/websocket.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值