我们能否可靠地长时间保持 HTTP/S 连接打开?

Dil*_*ral 6 java http batch-processing job-scheduling

我的团队维护一个应用程序(用 Java 编写),用于处理长时间运行的批处理作业。这些作业需要按定义的顺序运行。因此,应用程序在预定义的端口上启动套接字服务器以接受作业执行请求。它使套接字保持打开状态,直到作业完成(成功或失败)。这样,作业调度程序就知道一个作业何时结束,并且在成功完成该作业后,它会按预定义的顺序触发下一个作业。如果作业失败,调度程序会发出警报。

这是我们十多年来一直采用的设置。我们有一些作业需要运行几分钟,而另一些则需要几个小时(取决于数量)才能完成。该设置工作正常,没有任何问题。

现在,我们需要将此应用程序移至容器(RedHat OpenShift Container Platform),并且现有的基础设施策略仅允许公开默认的 HTTPS 端口。调度程序位于 OCP 外部,无法访问默认 HTTPS 端口以外的任何端口。

理论上,我们可以使用 HTTPS,将客户端超时设置为非常长的持续时间,并尝试模仿 TCP 套接字的当前设置。但是,由于 HTTP 协议是为服务短期请求而设计的,因此这种设置足够可靠吗?

Mic*_*man 1

当您使用套接字和 TCP 协议时,您可以控制保持连接打开的时间。使用 HTTP,您只能控制逻辑连接,而不能控制物理连接。实际连接由操作系统控制,通常 IT 人员可以配置所有这些超时。但默认情况下,它的工作原理是,当您关闭逻辑连接时,实际连接在预期下一次通信时不会关闭。它由操作系统关闭,不受您的代码控制。然而,即使它关闭并且您的下一个请求在此之后出现,它也会对您透明地打开。所以关不关其实并不重要。它对您的代码应该是透明的。简而言之,我假设您可以毫无问题地迁移到 HTTP/HTTPS。但您必须进行测试并查看。

另外,关于服务器到客户端通信的其他选项,您可以查看我对这个问题的回答:How to continue send data from backend to frontend when thingschanges