SpringBoot中websocket的使用

SpringBoot中websocket的使用

  • 1 WebSocket诞生
  • 2 WebSocket的简介
  • 3 WebSocket的使用
        • 1 准备一个SpringBoot环境
        • 2 添加WebSocket配置
        • 3 添加服务端WebSocket类
        • 4 启动项目, 使用在线工具模仿前端调用WebSocket
        • 5 查看数据

最近看到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

你可能感兴趣的:(学习笔记,JavaWeb,java,spring,boot,开发语言)