springboot整合websocket

1.创建springboot项目,引入spring-boot-starter-websocket依赖

   
            org.springframework.boot
            spring-boot-starter-websocket
        

全部依赖如下:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.10
         
    
    com.cherry
    demo
    0.0.1-SNAPSHOT
    demo
    Demo project for Spring Boot
    
        1.8
    
    

        
            org.springframework.boot
            spring-boot-starter-websocket
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    



2.创建一个TextWebSocketHandler的子类,重写handleTextMessage、afterConnectionEstablished、afterConnectionClosed方法

handleTextMessage()

handleTextMessage()方法通过英文方法名可知,用于处理文本信息。它有两个参数分别是:WebSocketSession和TextMessage。WebSocketSession可以通过sendMessage将消息发送给前台。TextMessage通过调用getPayload()接收前台消息体。

afterConnectionEstablished()

afterConnectionEstablished方法通过英文方法名可知,用于连接确立之后。
通过WebSocketSession的sendMessage方法,将创建的TextMessage对象给前台。

afterConnectionClosed

afterConnectionClosed方法用于连接关闭之后。参数有WebSocketSession和CloseStatus。WebSocketSession的方法sendMessage可以向前台发送消息,CloseStatus的getReason方法获得关闭的原因。

package com.cherry.demo.handler;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.io.IOException;

@Component
public class MyHandler extends TextWebSocketHandler {

    // 客户端想服务器发消息
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message)
            throws IOException {
        // 接收客户端的消息  message.getPayload()消息体
        System.out.println("获取到消息 >> " + message.getPayload());
        session.sendMessage(new TextMessage("消息已收到"));
        // 向服务端发送消息
        if(message.getPayload().equals("10")){
            for (int i = 0; i < 10; i++) {
                session.sendMessage(new TextMessage("消息 -> " + i));
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 建议连接时
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws
            Exception {
        session.sendMessage(new TextMessage("欢迎连接到ws服务"));
    }

    // 关闭连接
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status)
            throws Exception {
        System.out.println("断开连接!");
    }
}

3.创建WebSocketConfigurer接口的子类,重写registerWebSocketHandlers方法。

registerWebSocketHandlers()方法参数是WebSocketHandlerRegistry 。调用WebSocketHandlerRegistry 的addHandler方法传递处理器和路径。处理器参数是上一步创建的TextWebSocketHandler 的子类。路径是客户端调用时跟在端口后的路径。再调用WebSocketHandlerRegistry 的setAllowedOrigins方法传递星号,允许跨域访问。

WebSocketHandlerRegistry

addHandler()方法第一个传输传递处理器,第一个参数传递路径
setAllowedOrigins()方法设置允许源,传递星号,否则跨域。

import com.cherry.demo.handler.MyHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Autowired
    private MyHandler myHandler;

    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(this.myHandler, "/ws").setAllowedOrigins("*");
    }

}

4.使用easyswoole在线工具,测试websocket功能

http://www.easyswoole.com/wstool.html
springboot整合websocket_第1张图片

你可能感兴趣的:(springboot,spring,boot,websocket,java)