繁体   English   中英

通过 websocket 连接保持 Spring 引导应用程序处于活动状态

[英]Keep Spring Boot application alive with websocket connection

我的 Spring 引导应用程序非常小,并且有一项工作:通过打开与第三方网站的 websocket 连接并侦听消息来充当客户端。

问题是,在我的 javax.websocket.Endpoint 实现已初始化并创建连接后,我的 Spring 启动应用程序将关闭。

我会认为任何打开的 websocket 连接都会让我的应用程序保持正常运行?

我不需要嵌入式 servlet 容器,因此我在 application.yaml 中专门设置了web-environment: false

有没有办法在不添加我永远不会使用的 servlet 容器的情况下解决这个问题?

我通过使用OkHttpClient并在我的@Configuration使用@PostConstruct对其进行了初始化来解决此问题。 我用@Component注释了侦听器,它现在可以保持活动状态,而无需嵌入式servlet容器。

@PostConstruct
void handleRequest() {
    Runnable runnable = () -> {
        while (true) {
            try {
                JSONObject requestBody = getRequestBodyFromInput(serverSocket.accept());
                requestHandler.handleRequest(requestBody);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    };
    new Thread(runnable).start();
}

我在 while 套接字上启动了一个新线程,它将继续侦听,并且我不会通过在 while 循环中循环它来让该新线程死亡。

您只是可以永远循环下去。

while (true) {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM