gpt4 book ai didi

java - 浏览器停止加载后停止服务器线程

转载 作者:行者123 更新时间:2023-12-02 05:31:32 25 4
gpt4 key购买 nike

我正在尝试在用户点击 URL 后处理一些业务逻辑。服务器端将会有一个严重的循环运行。浏览器将在等待服务器返回结果的同时加载(我们可以看到顶部的旋转动画)。

我们不讨论在 HTTP 连接中执行重循环是否正确,我的问题是,当浏览器等待结果时,如果用户想停止处理,可以通过关闭浏览器/选项卡或按 ESCAPE 或按“X”十字按钮(在浏览器栏),浏览器可能会停止从服务器端接收任何数据。现在,我的问题是,正在处理重循环的服务器线程不会以某种方式停止(甚至浏览器不再接收数据)。我该如何阻止它?

我认为,根据TCP传输,如果一端的套接字关闭,另一端也会收到通知并关闭。我希望我的服务器会出现由 Servlet 抛出的类似“套接字关闭异常”的情况。但事实并非如此,因此 Servlet 中的循环仍在运行,直到完成。知道我该如何阻止它吗?如果用户继续点击该 URL 并取消请求,将会导致“内存不足”问题。

最佳答案

尝试做这样的事情:

  1. 创建服务来处理新线程(由您手动创建)中的繁重循环。
  2. 当用户在浏览器中点击 URL 时,在新线程中创建带有重循环的线程(通过处理服务)并向用户返回该线程的一些内部 id(该 id 可能由您生成),这将允许您在服务从第一点开始。
  3. 从客户端到服务器进行某种 ping 操作(例如,每 5 秒客户端将使用线程 id 对处理服务进行 ping 操作)。在线程处理服务中写入该线程的最后一次 ping 时间。
  4. 在从第 1 点开始的线程处理服务中,创建下一个线程来检查每个线程 ping 是否在最后 5 秒内。如果不是 - 中断线程。

关于java - 浏览器停止加载后停止服务器线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25480229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com