当前位置:   article > 正文

springboot 集成websocket_java 集成 websocket

java 集成 websocket

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

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

     @Configuration
     @EnableWebSocket
     public class WebSocketConfig implements WebSocketConfigurer {
     
         @Autowired
         private CustomWebSocketHandler customWebSocketHandler;
     
         @Override
         public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
             registry.addHandler(customWebSocketHandler, "/ws").setAllowedOrigins("*");
         }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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);
	        }
	    }
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/249161
推荐阅读
相关标签
  

闽ICP备14008679号