springboot整合websocket实现微信小程序聊天

WebSocket的定义: WebSocket 是独立的、创建在 TCP 上的协议。 Websocket 通过HTTP/1.1 协议的101状态码进行握手。 为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”

浏览器发出请求

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== //浏览器随机生成的Base64 加密值
Sec-WebSocket-Protocol: chat, superchat     //用户定义的字符串, 用来区分相同url下, 不同服务所需要的协议
Sec-WebSocket-Version: 13                  //版本
Origin: http://example.com

服务器响应请求

HTTP/1.1 101 Switching Protocols
Upgrade: websocket  //已经成功切换websocket协议
Connection: Upgrade //已经成功切换websocket协议
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了

引入依赖
<!-- SpringBoot WebSocket -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
WebSocketController
SecurityUtils
import cn.hutool.crypto.symmetric.AES;

public class SecurityUtils {

    // 加密
    public static String encryption(String data){
        AES aes = new AES("CBC", "PKCS7Padding",
                // 密钥,不可更改
                "GzcccPCall012345".getBytes(),
                // iv加盐
                "GzcccCallDYgjCE0".getBytes());
        // 加密为16进制表示
        String encryptHex = aes.encryptHex(data);
        return encryptHex;
    }

    // 解密
    public static String decryption(String data){
        AES aes = new AES("CBC", "PKCS7Padding",
                // 密钥,不可更改
                "GzcccPCall012345".getBytes(),
                // iv加盐
                "GzcccCallDYgjCE0".getBytes());
        // 加密为16进制表示
        String decryptStr = aes.decryptStr(data);
        return decryptStr;
    }


}

打开小程序

退出小程序

经验分享 程序员 微信小程序 职场和发展