springboot 集成websocket

当前java项目普遍使用两种方式集成Websocket,一种是依赖Tomcat,一种是springboot内置的,本文采用springboot内置方案。

	前提:引入Websocket包
	<dependency>
	     <groupId>org.springframework.boot</groupId>
	     <artifactId>spring-boot-starter-websocket</artifactId>
	 </dependency>
  1. 定义WebSocketConfig

     @Configuration
     @EnableWebSocket
     public class WebSocketConfig implements WebSocketConfigurer {
     
         @Autowired
         private CustomWebSocketHandler customWebSocketHandler;
     
         @Override
         public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
             registry.addHandler(customWebSocketHandler, "/ws").setAllowedOrigins("*");
         }
     }
    

2.定义WebSocketHandler

	/**
	 * 创建一个WebSocket请求控制器,来处理websocket通信的对话服务
	 */
	@Slf4j
	@Component
	public class CustomWebSocketHandler extends TextWebSocketHandler {
	   
	  	@Override
	    public void afterConnectionEstablished(@NotNull WebSocketSession session) {
	        log.info("CustomWebSocketHandler.afterConnectionEstablished.对话服务的websocket连接成功,session={}", session);
	        // 在连接建立后发送消息到服务器(可选)
	        // session.sendMessage(new TextMessage("Hello, server!"));
	    }
	 	
		 @Override
   		 public void handleTextMessage(@NotNull WebSocketSession session, TextMessage message) {
			log.info("CustomWebSocketHandler.handleTextMessage.websocket接收到消息,session={},message={}", session, message.getPayload());
			//在这里写自己的业务逻辑
		 }
	
		 @Override
	 	 public void handleTransportError(@NotNull WebSocketSession session, @NotNull Throwable ex) {
	        log.error("CustomWebSocketHandler.handleTransportError.对话服务的websocket连接异常,session={}", session, ex);
	        try {
	            if (session.isOpen()) {
	                log.error("CustomWebSocketHandler.handleTransportError.消息发送失败,websocket连接主动关闭,session={}", session);
	                session.close();
	            }
	        } catch (IOException e) {
	            throw new RuntimeException(e);
	        }
	    }
	}

3.此时就算集成完毕了,本地客户端可以正常调用了,可以使用AiFox工具,个人觉得比postman更好用

4.如果是正式环境使用了nginx,需要添加如下配置:

	location /ai-service-center/ws  {
      proxy_pass   http://localhost:30861/ws;
      proxy_read_timeout 300s;
      proxy_send_timeout 300s;
      proxy_http_version 1.1;
      proxy_pass_request_headers on;
      proxy_buffering off;
      proxy_cache off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;

    }

相关推荐

  1. SpringBoot集成WebSocket

    2024-01-20 14:34:01       45 阅读
  2. springboot +vue 集成websocket

    2024-01-20 14:34:01       29 阅读
  3. springboot 集成websocket

    2024-01-20 14:34:01       34 阅读
  4. Springboot 集成websocket

    2024-01-20 14:34:01       11 阅读
  5. SpringBoot集成websocket

    2024-01-20 14:34:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-20 14:34:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-20 14:34:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-20 14:34:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-20 14:34:01       18 阅读

热门阅读

  1. 记录 | 修改.gitignore文件,如何重新生效

    2024-01-20 14:34:01       34 阅读
  2. 深度解析window.history.go()和history.back()

    2024-01-20 14:34:01       33 阅读
  3. windows 利用DDNS-GO解析IPV6

    2024-01-20 14:34:01       41 阅读
  4. Todo List 变成 Contribution List

    2024-01-20 14:34:01       31 阅读
  5. C++:史上最坑小游戏

    2024-01-20 14:34:01       32 阅读
  6. Unity音频管理器

    2024-01-20 14:34:01       31 阅读
  7. QML与C++交互详解

    2024-01-20 14:34:01       34 阅读
  8. excel 常用函数

    2024-01-20 14:34:01       35 阅读
  9. 2024 前端高频面试题之 Vue 篇

    2024-01-20 14:34:01       27 阅读
  10. 126 对称的二叉树

    2024-01-20 14:34:01       21 阅读
  11. Spring中的IOC与AOP的理解(1)

    2024-01-20 14:34:01       30 阅读
  12. Go 常见报错 - VsCode运行go:go.mod file not found

    2024-01-20 14:34:01       31 阅读
  13. redisson-spring-boot-starter 自动化配置源码解析

    2024-01-20 14:34:01       29 阅读