我有一个应用程序,其前端是用JavaScript编写的(骨干)和用Python编写的后端。
我目前遇到问题,在初始化请求后2分钟后,前端和后端之间的连接终止。后端的任务在4-5分钟后完成。前端必须等到它收到来自后端服务器的通知。
这是我的场景, 我向后端发送ajax请求。这是一个非常昂贵的请求,消耗RAM和CPU。此请求需要大约3分钟才能完成。完成后,请求只返回一个JSON数据,其中包含"任务已完成"或者"任务失败"需要向用户显示。
Ajax请求是非常简单的请求,
$.ajax({
url: server_base_url+"/json_rpc",
method: "POST",
headers:headers,
data: JSON.stringify({
id: (new Date()).getTime(),
method: "execute",
params: params,
}),
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
success: function(data) {
if (data.error) {
console.log("RPC ERROR",model,method,data.error.message);
} else {
console.log("RPC OK",model,method,data.result);
}
if (cb) {
cb(data.error,data.result);
}
},
error: function() {
console.log("RPC ERROR",model,method);
}
});
在服务器端,我使用nginx来处理反向代理。我已经将超时时间增加到10分钟(仅用于测试)。
我面临的问题是,当一次性提出昂贵的请求时,即使在5分钟后用户也不会收到通知,因为连接已经在2-3分钟后终止(通过浏览器?)。然后,受挫的用户将刷新页面并再次点击同一按钮发送新请求,而其他请求可能仍在处理或完成。
有没有解决方案摆脱这个问题?任何建议都非常感谢。