SpringBoot integrado websocket (1) | (implementación de cliente websocket)

SpringBoot integrado websocket (1) | (implementación de cliente websocket)


capítulo

prefacio

WebSocket facilita el intercambio de datos entre el cliente y el servidor, lo que permite que el servidor envíe datos al cliente de forma activa. En la API de WebSocket, el navegador y el servidor solo necesitan completar un protocolo de enlace, y se puede crear una conexión persistente directamente entre los dos, y se puede realizar una transmisión de datos bidireccional.

1. Introducción a la dependencia del cliente de Websocket

El pom depende de lo siguiente

        <dependency>
            <groupId>org.java-websocket</groupId>
            <artifactId>Java-WebSocket</artifactId>
            <version>1.5.3</version>
        </dependency>

Dos, implementación de código websocket

1. Implementación del cliente WSClient

Puede definir la clase de cliente de websocket.Si necesita usar la conexión ws en otros lugares, puede usarla directamente inyectándola.

import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Component;

import java.net.URI;
@Slf4j
@Component
public class WSClient {
    
    

    public WebSocketClient webSocketClient(String url) {
    
    
        try {
    
    
            WebSocketClient webSocketClient = new WebSocketClient(new URI(url),new Draft_6455()) {
    
    
                @Override
                public void onOpen(ServerHandshake handshakedata) {
    
    
                    log.info("[websocket] 连接成功");
                }

                @Override
                public void onMessage(String message) {
    
    
                    log.info("[websocket] 收到消息={}",message);

                }
                @Override
                public void onClose(int code, String reason, boolean remote) {
    
    
                    log.info("[websocket] 退出连接");
                }

                @Override
                public void onError(Exception ex) {
    
    
                    log.info("[websocket] 连接错误={}",ex.getMessage());
                }
            };
            webSocketClient.connect();
            return webSocketClient;
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return null;
    }
}

2. Ejemplo de uso del cliente WSClient

Define cómo usar la clase WSClient para establecer una conexión ws

@Api(tags = {
    
    "websocket测试"})
@RestController
@RequestMapping("/ws")
public class SendMessageCtrl {
    
    


    @Autowired
    private WSClient wsClient;

    @GetMapping(value = "hello")
    public void hello(String name) throws InterruptedException {
    
    
        WebSocketClient client = this.wsClient.webSocketClient("ws://localhost:8905/ws/test");
        if (client != null){
    
    
            for (int i = 0; i < 10; i++) {
    
    
                Thread.sleep(1000);
                client.send("客户端发送消息"+i);
            }
        }
    }
}

3. Escenarios de uso real

1. Uso de múltiples conexiones WSClient

Lo anterior es una demostración simple que puede conectarse a la interfaz websocket a través del cliente, pero el escenario real puede ser que muchos usuarios accedan al servicio local y el servicio necesita llamar a la interfaz ws remota. ¿Conexiones websocket independientes entre usuarios?

Idea: defina una variable global para almacenar el cliente websocket, el cliente desencadena el evento de envío del mensaje y obtiene el cliente correspondiente en la variable global para enviar el mensaje

@Api(tags = {
    
    "websocket测试"})
@RestController
@RequestMapping("/ws")
public class SendMessageCtrl {
    
    


    @Autowired
    private WSClient wsClient;

    private static ConcurrentHashMap<String, WebSocketClient> wsClientSet = new ConcurrentHashMap<>();


    @GetMapping(value = "hello")
    public void hello(String name) {
    
    
        WebSocketClient client;
        if (wsClientSet.containsKey(name)) {
    
    
            client = wsClientSet.get(name);
        } else {
    
    
            client = this.wsClient.webSocketClient("ws://localhost:8905/ws/" + name);
            wsClientSet.put(name, client);
        }
        if (client != null) {
    
    
            client.send("请根据卖火柴的小女孩生成一个类似的故事");
        }
    }
}

Resumir

Lo anterior es el contenido del cliente de websocket integrado de SpringBoot, que se utiliza para que los servicios de back-end llamen a las solicitudes de websocket. La ejecución de la lógica comercial específica se implementa en el código. Aquí hay solo demostraciones y ejemplos específicos, y los escenarios de aplicación reales aún deben ser evaluados por usted mismo.

Supongo que te gusta

Origin blog.csdn.net/Oaklkm/article/details/130705555
Recomendado
Clasificación