springboot创建websocket服务-ws方式


#pom依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

 

#配置类

@Configuration
public class WebSocketConfig {
 
    /**
     * 首先在该类中注入一个ServerEndpointExporter的bean,
     * ServerEndpointExporter这个bean会自动注册使用了@ServerEndpoint这个注解的websocket endpoint
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
 
}

 

#服务端

@Slf4j
@Component
@ServerEndpoint("/")
public class MyWebSocketServer {
 
    
    /**
     * 静态变量,用来记录当前连接数
     */
    private static final AtomicInteger ONLINE_COUNT = new AtomicInteger();
 
    /**
     * concurrent线程安全set,用来存放每个客户端对应的MyWebSocketServer对象
     */
    public static final CopyOnWriteArraySet<MyWebSocketServer> WEBSOCKETS = new CopyOnWriteArraySet<>();
 
    /**
     * 与每个客户端的连接会话,需要通过它来给客户端发送数据
     */
    private Session session;
 
    /**
     * 连接成功调用的方法
     *
     * @param session 可选的参数。与某个客户端的连接会话
     */
    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        WEBSOCKETS.add(this);
        ONLINE_COUNT.incrementAndGet();
        log.info("有新的连接加入!当前连接总数为{}", ONLINE_COUNT.get());
    }
 
    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose() {
        WEBSOCKETS.remove(this);
        ONLINE_COUNT.decrementAndGet();
        log.info("有一连接关闭!当前连接总数为{}", ONLINE_COUNT.get());
    }
 
    @OnMessage
    public void onMessage(String message) {
        log.info("WebSocket接收消息:sessionId为{},消息为:{}", this.session.getId(), message);
    }
 
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("WebSocket接收消息错误{},sessionId为{}", error.getMessage(), session.getId());
        error.printStackTrace();
    }
 
    public void sendMessage(String message) {
        log.info("WebSocket发送消息:sessionId为{},消息为:{}", this.session.getId(), message);
        try {
            this.session.getBasicRemote().sendText(message);
        } catch (IOException e) {
            log.error("WebSocket发送消息错误{},sessionId为{}", e.getMessage(), session.getId(), e);
        }
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        MyWebSocketServer that = (MyWebSocketServer) o;
        return Objects.equals(session, that.session);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(session);
    }
}

 

#连接地址

ws://ip:port/context-path/webSocket

 

#在线测试地址

http://coolaf.com/tool/chattest


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM