我有一个jquery,每次用不同的IP调用几次。然后jquery在负责执行ping的mvc4控制器中调用一个操作,然后返回结果。
在开发工具中,我注意到所有ping请求都被标记为挂起,并且一个接一个地提供服务。一旦服务了一个ping请求,队列中的下一个请求就会被服务,依此类推。最后的ping请求突然被自动取消/中止/拒绝。每个ping请求包括4次重试和每次重试,超时时间为5秒。但是,如果我为每一次重试设置一个较低的超时时间,例如,750毫秒而不是5秒,那么所有这些都能完美地工作。所以我想知道为什么最后的ping请求会自动取消.似乎最后一项被拒绝是因为它们需要“很长”的时间才能得到服务。
我可以在这里张贴一些代码,如果需要,请,让我知道。
我正在使用jquery-1.10.2
更新:
ajax({
url: "/Tests/Ping/",
data: { IPAddress: IP },
type: 'POST',
dataType: 'json'
}).then(function (data) {
// Do some stuff on success
},
function (data) {
// Do some stuff on error
// here I am receiving for last ping requests:
// readyState: 0
// responseText: ""
// status: 0
// statusText: "error"
});在主计长中的行动:
[HttpPost]
public ActionResult Ping(string IPAddress)
{
(...)
System.Net.NetworkInformation.Ping pinger = new System.Net.NetworkInformation.Ping();
(...)
string data = new String('a', 32);
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 5000;
for (int i = 0; i < 4; i++)
{
reply = pinger.Send(IPAddress, timeout, buffer);
(...)
}
(...)
Response.ContentType = "application/json;charset=utf-8";
Response.StatusCode = (int)(packetsLost < 4 ? HttpStatusCode.OK : HttpStatusCode.NotFound);
return new JsonResult()
{
Data = new
{
sent = 4,
received = 4- packetsLost,
lost = packetsLost,
percentLost = (int)(packetsLost / 4* 100)
}
}
}看(.)意味着有更多的密码。此外,我还需要返回http状态代码加上json对象,以便强制jquery调用在“然后”中的“成功或错误”部分中输入。这段代码对很多ping请求都是正常的,但是正如前面所说的,最后的ping请求与以前的相同,都被标记为已取消/中止/拒绝。
发布于 2013-11-03 18:51:09
超时 类型:编号 设置请求的超时(毫秒)。这将覆盖使用$.ajaxSetup()设置的任何全局超时。超时时间从发出$.ajax调用时开始;如果其他几个请求正在进行,并且浏览器没有可用的连接,则可以在发送请求之前将请求超时。
它们超时的原因是,所有浏览器都会自动将多个请求排队到同一台主机,以便在任何给定时间最多有2个并发请求。因此,如果您从www.example.com请求3个文件,则在完成前两个文件之前,第三个文件将不会被请求。
你可以通过以下方式来解决这个问题:
发布于 2013-11-03 19:06:57
与其为每个IP地址发送单独的请求,您还可以执行以下操作-
thread.join使我们的主线程等待ping线程完成,否则ping线程将在它们完成任务之前终止。https://stackoverflow.com/questions/19754730
复制相似问题