gpt4 book ai didi

java - 长轮询 杀死服务器端的线程

转载 作者:行者123 更新时间:2023-12-02 04:49:40 26 4
gpt4 key购买 nike

早上好/晚上好,

我正在通过 ajax-java 实现客户端-服务器之间的长池化。长轮询在客户端正常工作,每 30 秒抛出一个新连接,并中止前一个连接。但问题是,在服务器端,所有这些请求/线程都保持 Activity 状态,直到我们有东西返回给客户端。但就像我说的,客户可能不再听了。这里有一些代码:

客户:

     // Long Polling (Recommened Technique - Creates An Open  Connection To Server ∴ Fast)
(function poll(){
var tenantName = $("#tenantName").val();
$.ajax({
method:"GET",
url: "url",
success: function(data){
if (data === true) {
bootbox.alert("Page has been modify <a href='javascript:void(0)' onclick='reload()'>reload</a>");
}
}, dataType: "json", complete: poll, timeout: 60000 });
})();

服务器:

       /**
* @return
*/
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public Boolean getSubStepStatus(@RequestParam("subStep") String subStep,
@RequestParam("tenantId") String tenantId) {
if (!isInStep(subStep, tenantId)) {
tenantsInStep.get(subStep).add(tenantId);
}
while (true) {
String modifierTenantId = stepModifyByTenant.get(subStep);
if (modifierTenantId != null && !modifierTenantId.equals(tenantId) && !isInStep(subStep, tenantId)) {
tenantsInStep.get(subStep).remove(tenantId);
return true;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

问题就像我说的所有线程在服务器端每 30 秒都在增长,我使用这种技术做错了什么?

最佳答案

Thread.sleep(1000);

这不是 Java 中进行长轮询的方法。方法是将请求踢入异步模式,注册监听器,并放弃工作线程。

关于java - 长轮询 杀死服务器端的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29339821/

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