Php 发送响应并继续执行脚本

Php 发送响应并继续执行脚本,php,telegram,telegram-bot,Php,Telegram,Telegram Bot,我正在创建一个高负载电报机器人,这意味着许多请求都需要时间来处理。 我使用webhook(Telegram将更新发送到,比如,handler.php),它需要用正确的[]答案进行响应,并完全关闭Telegram的连接以发送下一个更新。否则,电报将只增加待更新计数,并且在处理前一个更新之前不会发送任何新的更新 所以我要做的是在代码执行之前正确响应并关闭连接 StackOverflow提出了一些解决方案。但是这些都不适用于我,因为它们只在没有输出的情况下关闭连接,我需要用[]进行响应 我想到的唯

我正在创建一个高负载电报机器人,这意味着许多请求都需要时间来处理。 我使用webhook(Telegram将更新发送到,比如,
handler.php
),它需要用正确的
[]
答案进行响应,并完全关闭Telegram的连接以发送下一个更新。否则,电报将只增加待更新计数,并且在处理前一个更新之前不会发送任何新的更新

所以我要做的是在代码执行之前正确响应并关闭连接

StackOverflow提出了一些解决方案。但是这些都不适用于我,因为它们只在没有输出的情况下关闭连接,我需要用
[]
进行响应


我想到的唯一解决方法是从
handler.php
调用
shell\u exec('php sendmages.php>/dev/null 2>/dev/null&')
。很好用,但这不是我需要的。是否还有其他建议响应并关闭连接,以便代码可以在后台执行?

我找到了一个适用于Telegram Bot API Webhook的简单解决方案。它允许我在脚本本身中直接调用处理脚本,而无需使用
exec()
shell\u exec()

耗时代码

$bool=true;//常规代码中的某些条件
如果($bool){
睡眠(10);
}
这将导致其他机器人用户的巨大延迟,因为Telegram没有收到响应,也不会向您发送任何其他更新

解决方案

if(isset($\u GET['action'])){
睡眠(10);
}
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://localhost/handler.php?action');
curl_setopt($ch,CURLOPT_FRESH_CONNECT,true);
curl_setopt($ch,CURLOPT_TIMEOUT_MS,50);
curl_exec($ch);
卷曲关闭($ch);
通过这种方式,脚本将调用自身(或任何其他脚本),电报将提供正确和快速的响应,而重的部分将单独执行

强烈建议在
CURLOPT\u TIMEOUT\u ms
时不要低于50 ms,有时它在接收电报请求时不起作用。