springboot整合websocket

 websocket和传统http协议

http

概念

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本数据的应用层协议。它是基于TCP/IP协议来传输数据的,是Web浏览器和Web服务器之间进行数据交换的标准协议。

HTTP协议的主要特点包括:

  1. 简单易用:HTTP协议使用简单,易于开发和调试。

  2. 无状态:HTTP协议是一种无状态协议,即服务器不会记住之前客户端的请求信息,每个请求都是独立的。

  3. 可扩展:HTTP协议支持各种不同的请求方式和响应类型,同时也可以通过HTTP头部来传递自定义数据。

  4. 明文传输:HTTP协议传输的数据是明文的,因此可能会存在安全问题。

  5. 支持缓存:HTTP协议支持缓存机制,可以通过缓存来提高性能。

  6. 支持虚拟主机:HTTP协议支持虚拟主机,可以将多个域名映射到同一个IP地址上。

总之,HTTP协议在互联网通信方面发挥了重要作用,是Web应用开发不可缺少的基础。

 原理图

springboot整合websocket_第1张图片

 websocket

概念

WebSocket是一种网络协议,它使浏览器和服务器之间建立持久性的连接,可实现双向通信。与HTTP协议不同,WebSocket建立一条TCP连接后,之后的数据传输都在这一条连接上进行,不需要重新建立连接。WebSocket协议还支持发送二进制数据、文本数据和ping-pong消息以实现心跳保活等。 WebSocket通常用于实时性要求较高的应用,如在线游戏、股票行情、即时消息等。

 原理图

springboot整合websocket_第2张图片 

websocket和传统http比较

HTTP和WebSocket是客户端与服务器之间的通信协议,二者有以下优缺点对比:

优点:

HTTP:

  1. 可靠性高:HTTP是基于TCP协议的,可以保证数据传输的可靠性。

  2. 兼容性好:HTTP协议的版本升级不会影响旧版本的使用,向下兼容性好。

  3. 安全性好:HTTP协议可以与SSL/TLS协议相结合,保证数据传输的安全性。

WebSocket:

  1. 实时性好:WebSocket与HTTP相比,具有实时性更强的优势。

  2. 效率高:WebSocket可以减少HTTP协议中的握手开销和头部信息,提高数据传输效率。

  3. 跨域支持好:WebSocket可以跨域支持数据传输,实现跨域数据传输更加方便。

缺点:

HTTP:

  1. 传输速度慢:HTTP的传输速度相对较慢,由于每个请求都需要建立和释放连接。

  2. 实时性差:HTTP无法满足实时性要求高的场景,特别是在推送数据时,效率较低。

WebSocket:

  1. 兼容性差:WebSocket协议在IE浏览器中的兼容性较差。

  2. 安全性差:由于WebSocket不是基于HTTP协议的,因此安全性存在一定的问题。

  3. 状态维护难度大:WebSocket需要服务器端维护客户端的状态,增加了服务器端的负担。

总的来说,HTTP协议更适合静态数据的传输和请求,WebSocket协议更适合实时性和大量数据传输的场景。选择协议要根据场景需求来决定。

springboot整合websocket实战

环境搭建

pom文件


    org.springframework.boot
    spring-boot-starter-websocket

配置类

@Configuration
public class WebSocketConfig {
    /**
     * 	注入ServerEndpointExporter,
     * 	这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(8192 * 40);
        container.setMaxBinaryMessageBufferSize(8192 * 40);
        return container;
    }

}

业务编写

@Component
@Slf4j
@ServerEndpoint("/websocket/")
public class RealTimeDataWebsocket {


    /**
     * 链接成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam(value = "userId") String userId) {
        // todo 初始化逻辑(进行一些记录等)
    }



    /**
     * 收到客户端消息后调用的方法
     * 收到的消息结果
     *
     * @param message
     * @param
     */
    @OnMessage
    public void onMessage(String message, Session session, @PathParam(value = "userId") String userId) {
        // todo 业务逻辑,第一个参数位置支持byte[]
    }


    /**
     * 发送错误时的处理
     *
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error) {
        // todo 错误逻辑
    }


    /**
     * 链接关闭调用的方法
     */
    @OnClose
    public void onClose(@PathParam(value = "userId") String userId) {
        // todo 关闭逻辑
    }


    // 想客户端发送消息
    public void sendOneMessage(String userId, String message) {
        
    }
}

测试

测试websocketicon-default.png?t=N7T8https://blog.csdn.net/weixin_44808225/article/details/134272651?spm=1001.2014.3001.5501

你可能感兴趣的:(springboot,测试,java,spring,boot,websocket,后端,spring,java)