SpringBoot intègre websocket (4) | (utilisez okhttp3 pour implémenter websocket)

SpringBoot intègre websocket (4) | (utilisez okhttp3 pour implémenter websocket)


Chapitre
Lien vers le chapitre 1 : SpringBoot intègre websocket (1) | (implémentation du client websocket)
Chapitre 2 lien : SpringBoot intègre websocket (2) | (implémentation du serveur websocket et implémentation du transfert websocket)

Préface

HTTP est une méthode réseau couramment utilisée par les applications modernes pour échanger des données et des médias. Une utilisation efficace de HTTP peut accélérer le chargement des ressources et économiser la bande passante. OkHttp est un client HTTP efficace avec les fonctionnalités par défaut suivantes :

Prend en charge HTTP/2, permettant à toutes les requêtes avec la même adresse hôte de partager la même connexion socket
Le pool de connexions réduit le délai de requête
Compression GZIP transparente réduit la taille des données de réponse
Mettre en cache le contenu de la réponse pour éviter certaines requêtes complètement en double
Réessayer automatiquement d'autres adresses IP de l'hôte et rediriger automatiquement lorsque la requête échoue a>
reviendra à TLS 1.0 lorsque la négociation échoue

1. Étapes de mise en œuvre

1. Étapes de mise en œuvre

1. Créez la configuration OkHttpClient et initialisez certains paramètres.
2. Utilisez l'adresse URL de WebSocket pour vous connecter.
3. Définissez le rappel de l'état de connexion et le rappel des messages de WebSocket.
4. Analyser les activités de traitement des messages JSON, etc.
5. Une fois la connexion établie, utilisez WebSocket pour envoyer des messages

2. Implémentation du code du service Websocket

1. Implémentation de WebSocketListener

springboot se connecte à l'interface WS

@Slf4j
public class SparkChatInnerServer extends WebSocketListener {
    
    

    public StringBuilder stringBuilder;
    public Boolean wsCloseFlag;

    // 构造函数
    public SparkChatInnerServer(Boolean wsCloseFlag) {
    
    
        this.wsCloseFlag = wsCloseFlag;
        this.stringBuilder = new StringBuilder();
    }

    /**
     * 开启连接
     *
     * @param webSocket
     * @param response
     */
    @Override
    public void onOpen(WebSocket webSocket, Response response) {
    
    
        super.onOpen(webSocket, response);
        log.info("内部 连接ws服务");
    }

    /**
     * 收到ws服务返回的数据
     *
     * @param webSocket
     * @param text
     */
    @Override
    public void onMessage(WebSocket webSocket, String text) {
    
    
        log.debug("收到的数据:{}", text);
        JsonParse myJsonParse = JSON.parseObject(text).toJavaObject(JsonParse.class);
        if (myJsonParse.header.code != 0) {
    
    
            log.error("发生错误,错误码为:{}", myJsonParse.header.code);
            log.error("本次请求的sid为:{}", myJsonParse.header.sid);
            wsCloseFlag = true;
            webSocket.close(1000, "");
        }
        List<Text> textList = myJsonParse.payload.choices.text;
        for (Text temp : textList) {
    
    
            stringBuilder.append(temp.content);
        }
        if (myJsonParse.header.status == 2 || myJsonParse.payload.choices.status == 2) {
    
    
            wsCloseFlag = true;
            webSocket.close(1000, "");
        }
    }

    @Override
    public void onFailure(WebSocket webSocket, Throwable t, Response response) {
    
    
        wsCloseFlag = true;
        super.onFailure(webSocket, t, response);
        try {
    
    
            if (null != response) {
    
    
                int code = response.code();
                log.error("会话异常:code:{},body:{}", code, response.body().string());
                if (101 != code) {
    
    
                    System.out.println("connection failed");
                }
            }
        } catch (IOException e) {
    
    
            log.error("会话异常:{}", e.getMessage());
        }
    }

}

2. Mise en œuvre de l'appel

Springboot fournit une implémentation d'interface Websocket externe


   public String sparkQueryBase(String sendparam, String chatUrl) throws Exception {
    
    
        String url = AuthUtils.assembleRequestUrl(chatUrl, websocketConfigConst.apiKey, websocketConfigConst.apiSecret, "GET");
        OkHttpClient client = new OkHttpClient.Builder().build();
        Request request = new Request.Builder().url(url).build();
        SparkChatInnerServer sparkChatInnerServer = new SparkChatInnerServer(false);
        WebSocket webSocket = client.newWebSocket(request, sparkChatInnerServer);
        webSocket.send(sendparam);
        // 获取返回结果
        int i = 0;
        while (true) {
    
    
            Thread.sleep(100);
            if (sparkChatInnerServer.wsCloseFlag) {
    
    
                break;
            }
            if (i > 120) {
    
    
                log.error("ws服务连接超时,无法进行问题收集");
                break;
            }
            i++;
        }
        webSocket.close(1000, "");
        return sparkChatInnerServer.stringBuilder.toString();
    }

Résumer

Cet article présente principalement OkHttp3 pour implémenter le client websocket, et en même temps, il sert les paramètres de requête websocket mobile via le service de requête.

Lien vers le chapitre 1 : SpringBoot intègre websocket (1)|(implémentation du client websocket)
Lien vers le chapitre 2 : < a i=3>SpringBoot intègre websocket (2) | (implémentation du serveur websocket et implémentation du transfert websocket)

Je suppose que tu aimes

Origine blog.csdn.net/Oaklkm/article/details/132667640
conseillé
Classement