【发布时间】:2015-03-30 06:40:46
【问题描述】:
早安/晚安,
我正在通过 ajax-java 实现客户端-服务器之间的长池。并且长轮询在客户端正常工作,每 30 秒抛出一个新连接,前一个连接被中止。但问题是,在服务器端,所有这些请求/线程都保持活动状态,直到我们有一些东西要返回给客户端。但就像我说的客户可能不再听了。这里有一些代码:
客户:
// 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 秒在服务器端增长和增长,我在使用这种技术时做错了什么?
【问题讨论】:
标签: java spring jakarta-ee