通过 websocket 连接保持 Spring 启动应用程序的活动状态



我的 Spring Boot 应用程序非常小,只有一个工作:通过打开与第三方网站的 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 (true) {}

相关内容

  • 没有找到相关文章

最新更新