SpringBoot intègre WebSocket de deux manières

En avril 2014, ce site avait étudié de manière approfondie la technologie HTML5 et présentait l'exemple HTML5 WebSocket. L'API de la spécification Servlet3.0 utilisée à l'époque nécessitait le support de Tomcat7 (il semble que WebSocket ait également été ajouté dans la version de maintenance ultérieure de Tomcat6. support), dès le début, cet exemple était encore une fonction spéciale de ce site, et de nombreuses personnes sont venues me demander le code source. Après de nombreuses années, j'ai utilisé l'architecture SpringBoot pour expérimenter l'implémentation de WebSocket intégré. Après quelques informations, j'ai probablement trouvé deux façons d'y parvenir. Je les ai pratiquées séparément, donc j'appelle ces deux façons la version intégrée du JDK. Et Spring version du paquet.

1. Version intégrée du JDK

Utilisez principalement les annotations sous le package javax.websocket pour l'intégration, y compris principalement : ServerEndpoint, OnOpen, OnMessage, OnClose, les classes liées à OnError et les annotations à intégrer, globalement relativement simples, toutes sont déclarées en fonction des méthodes définies par les annotations, reportez-vous à As indiqué dans le code suivant :

JdkWebSocket

package cn.chendd.websocket.jdk;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

/**
 * websocket实现
 *
 * @date 2023/6/2 21:02
 */
@Component
@ServerEndpoint(value = "/websocket/jdk")
public class JdkWebSocket {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("WebSocketConfig.onOpen");
    }

    @OnMessage
    public void onMessage(Session session , String message) {
        System.out.println("WebSocketConfig.onMessage-->" + session + "--->" + message);
    }

    @OnClose
    public void onClose() {
        System.out.println("WebSocketConfig.onClose");
    }

    @OnError
    public void onError(Session sesison , Throwable throwable) {
        System.out.println("WebSocketConfig.onError-->" + sesison + "--->" + throwable);
    }

}

JdkWebSocketConfig

package cn.chendd.websocket.jdk;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @author chendd
 * @date 2023/6/2 21:15
 */
@Configuration
public class JdkWebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }

}

résultat de l'opération

2. Version pack printemps

La version du package Spring encapsule le type de message et fournit une API WebSocket plus complète, qui mérite une analyse approfondie.

SpringWebSocketHandler

package cn.chendd.websocket.spring;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;

/**
 * SpringWebSocketHandler
 *
 * @author chendd
 * @date 2023/6/2 22:08
 */
@Component
public class SpringWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        super.afterConnectionEstablished(session);
        System.out.println("SpringWebSocketHandler.afterConnectionEstablished");
    }

    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        super.handleMessage(session, message);
        System.out.println("SpringWebSocketHandler.handleMessage");
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        super.handleTextMessage(session, message);
        System.out.println("SpringWebSocketHandler.handleTextMessage");
    }

    @Override
    protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
        super.handlePongMessage(session, message);
        System.out.println("SpringWebSocketHandler.handlePongMessage");
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        super.handleTransportError(session, exception);
        System.out.println("SpringWebSocketHandler.handleTransportError");
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        super.afterConnectionClosed(session, status);
        System.out.println("SpringWebSocketHandler.afterConnectionClosed");
    }

    @Override
    public boolean supportsPartialMessages() {
        System.out.println("SpringWebSocketHandler.supportsPartialMessages");
        return super.supportsPartialMessages();
    }
}

SpringWebSocketConfig

package cn.chendd.websocket.spring;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import javax.annotation.Resource;

/**
 * SpringWebSocketConfig
 *
 * @author chendd
 * @date 2023/6/2 22:11
 */
@Configuration
@EnableWebSocket
public class SpringWebSocketConfig implements WebSocketConfigurer {

    @Resource
    private SpringWebSocketHandler springWebSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(springWebSocketHandler , "/websocket/spring").setAllowedOrigins("*");
    }
}

résultat de l'opération

 

3. Autres consignes

(1) Cet exemple se concentre sur l'exemple de code Java côté serveur. Aucun exemple frontal n'est écrit. Vous pouvez vous référer à l'intégration HTML frontale dans le code source du projet ci-dessous, ou utiliser l'adresse de la page du test WebSocket en ligne. utilisé dans cet exemple pour la vérification en ligne , le clic droit pour afficher son code source est également le code pertinent de la spécification native HTML5 ;

(2) La version intégrée de JDK et la version packagée de Spring sont fournies. Je recommande personnellement d'utiliser la version packagée de Spring. Après tout, les annotations de JDK ne sont pas assez claires pour décrire les paramètres spécifiques de la méthode annotée, et la version packagée de Spring a un type de message.encapsulation;

(3) Le code est relativement simple, combiné avec le code complet du précédent " Devinez le mini programme que vous choisissez " est également inclus, la structure du package de code est la suivante :

(4) Le code source complet est visible : le texte original

Deux façons dont SpringBoot intègre WebSocket Bienvenue sur la plateforme de partage d'expérience personnelle de Chen Dongdong https://www.chendd.cn/blog/article/1667515782887432194.html

Je suppose que tu aimes

Origine blog.csdn.net/haiyangyiba/article/details/131147209
conseillé
Classement