2009-08-26 71 views
1

如果发出http请求并且调用者放弃请求,它是否会完成?例如,一个异步JavaScript GET请求在数据库中记录横幅点击然后重定向。脚本是否需要等待响应?HTTP请求是否总是完成?

回答

1

你应该等待它是安全的。你永远不知道服务器什么时候会处理你的请求(尽管它通常在几百毫秒或更少的时间内),所以你不知道是否超时,失败,或者如果你打算收到除非您等待,否则不同的预期反应

2

客户端不会向服务器发送任何通知来取消请求。

PHP不知道客户端是否断开连接,直到它尝试向客户端发送一些数据(例如,无缓冲的echo()调用),所以如果脚本没有向用户返回任何数据,它将完全执行。如果确实返回数据,则可能会中途中止,但可以使用ignore_user_abort()更改) 如果您使用的是其他环境,则必须查阅文档。

2

对于大多数情况下,一旦请求被服务器接收到,如果客户端停止监听,它将不会停止处理。

但是,服务器在服务请求时可能总是失败,所以假设它完成可能不是一个好主意。

3

您的要求有多重要?如果数据库当时不可用,该怎么办?如果服务器端代码引发异常怎么办?

对于非常关键的请求,您可能需要实现某种能够保存请求数据的消息队列,直到它可以被完全处理。如果您正在处理网格和云,这会变得更加复杂(您不能将消息排列在单个节点上,因为节点可能会发生硬件故障)。但是,这是一个极端的情况,你最终会得到专用的队列服务器。

1

您不必等待响应以便请求到达服务器。服务器可以在处理请求时检查是否有人正在监听,但即使没有人正在监听响应,处理请求也会开始(当然,除非出现错误)。

如果要确保请求确实已处理完毕,则应等待响应,但不要求请求通过服务器。

相关问题