发送响应并继续执行脚本
Send response and continue executing script
我正在创建一个高负载 Telegram Bot,这意味着有很多请求进来,需要时间来处理。
我使用 webhook(Telegram 将更新发送到 handler.php
),它需要使用正确的 []
答案进行响应并完全关闭 Telegram 发送下一个更新的连接。否则 Telegram 只会增加 pending_update_count
并且不会发送任何新的更新,直到处理完前一个更新。
所以我要做的是正确响应并在执行代码之前关闭连接。
Whosebug 提出了一些解决方案。但是 none 对我有用,因为它们只在没有输出时关闭连接,我需要用 []
.
响应
How do I close a connection early?
我想到的唯一解决方法是从 handler.php
调用 shell_exec('php sendMessage.php >/dev/null 2>/dev/null &')
。工作得很好,但这不是我需要的。还有其他响应和关闭连接的建议,以便代码可以在后台执行吗?
我找到了一个适用于 Telegram Bot API webhook 的简单解决方案。它允许我直接在脚本本身内调用处理脚本,而无需使用 exec()
或 shell_exec()
.
Time-consuming代码
$bool = true; // some condition in your regular code
if($bool) {
sleep(10);
}
这将给其他机器人用户带来巨大的延迟,因为 Telegram 没有收到响应,也不会向您发送任何其他更新。
解决方案
if(isset($_GET['action'])) {
sleep(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);
curl_close($ch);
这样脚本将调用自身(或任何其他脚本),Telegram 将得到正确和快速的响应,而重部分将单独执行。
强烈建议在 CURLOPT_TIMEOUT_MS
上不要低于 50 毫秒,有时它在接收来自 Telegram 的请求时不起作用。
我正在创建一个高负载 Telegram Bot,这意味着有很多请求进来,需要时间来处理。
我使用 webhook(Telegram 将更新发送到 handler.php
),它需要使用正确的 []
答案进行响应并完全关闭 Telegram 发送下一个更新的连接。否则 Telegram 只会增加 pending_update_count
并且不会发送任何新的更新,直到处理完前一个更新。
所以我要做的是正确响应并在执行代码之前关闭连接。
Whosebug 提出了一些解决方案。但是 none 对我有用,因为它们只在没有输出时关闭连接,我需要用 []
.
How do I close a connection early?
我想到的唯一解决方法是从 handler.php
调用 shell_exec('php sendMessage.php >/dev/null 2>/dev/null &')
。工作得很好,但这不是我需要的。还有其他响应和关闭连接的建议,以便代码可以在后台执行吗?
我找到了一个适用于 Telegram Bot API webhook 的简单解决方案。它允许我直接在脚本本身内调用处理脚本,而无需使用 exec()
或 shell_exec()
.
Time-consuming代码
$bool = true; // some condition in your regular code
if($bool) {
sleep(10);
}
这将给其他机器人用户带来巨大的延迟,因为 Telegram 没有收到响应,也不会向您发送任何其他更新。
解决方案
if(isset($_GET['action'])) {
sleep(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);
curl_close($ch);
这样脚本将调用自身(或任何其他脚本),Telegram 将得到正确和快速的响应,而重部分将单独执行。
强烈建议在 CURLOPT_TIMEOUT_MS
上不要低于 50 毫秒,有时它在接收来自 Telegram 的请求时不起作用。