• Spring boot使用websocket实现在线聊天


    maven依赖

    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starter-webartifactId>
    		dependency>
    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starterartifactId>
    		dependency>
    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starter-websocketartifactId>
    		dependency>
    		<dependency>
    			<groupId>org.springframework.bootgroupId>
    			<artifactId>spring-boot-starter-thymeleafartifactId>
    		dependency>
    		<dependency>
    			<groupId>org.projectlombokgroupId>
    			<artifactId>lombokartifactId>
    		dependency>
    		<dependency>
    			<groupId>cn.hutoolgroupId>
    			<artifactId>hutool-allartifactId>
    			<version>5.8.26version>
    		dependency>
    

    Java 类

    WebSocket 配置

    package com.zpjiang.chat;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.socket.server.standard.ServerEndpointExporter;
    
    @Configuration
    public class WebSocketConfig {
       
        /**
         * 	注入ServerEndpointExporter,
         * 	这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
         */
        @Bean
        public ServerEndpointExporter serverEndpointExporter() {
       
            return new ServerEndpointExporter();
        }
        
    }
    

    WebSocket 接口入径(ws://localhost:8087/socket/websocket/userId)

    package com.zpjiang.chat;
    
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.CopyOnWriteArraySet;
    
    import javax.websocket.OnClose;
    import javax.websocket.OnError;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.server.PathParam;
    import javax.websocket.server.ServerEndpoint;
    
    import org.springframework.stereotype.Component;
    
    import cn.hutool.json.JSONUtil;
    import lombok.extern.slf4j.Slf4j;
    
    @Component
    @Slf4j
    @ServerEndpoint("/websocket/{userId}") // 接口路径  ws://localhost:8087/socket/websocket/userId;
    public class WebSocket {
       
    
    	// 与某个客户端的连接会话,需要通过它来给客户端发送数据
    	private Session session;
    	/**
    	 * 用户ID
    	 */
    	private String userId;
    
    	// concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
    	// 虽然@Component默认是单例模式的,但springboot还是会为每个websocket连接初始化一个bean,所以可以用一个静态set保存起来。
    	// 注:底下WebSocket是当前类名
    	private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();
    	// 用来存在线连接用户信息
    	private static ConcurrentHashMap
  • 相关阅读:
    Qt中QJsonDocument 类
    win10 本地通过docker提供kafka服务
    MongoDB(一)之Windows安装
    继续读研大学借的助学贷款怎么办
    【unity3D】Input Field组件(可供用户输入的文本框)
    AI 学习时代:大语言模型领域的行业术语解析
    淘宝天猫CTO若海:沉浸式的消费体验是下一步发力方向
    1737C - Ela and Crickets
    CSS 和 HTML 的结合方式/css选择器
    JDK8内存溢出注意事项
  • 原文地址:https://blog.csdn.net/jastzhang/article/details/138807054