我在Raspberry Pi中运行一个apache服务器,它使用CURL从PHP脚本连接到ESP8266 WiFi模块。它可以通过模块的自动回答工作得很好(即一旦他们收到http查询,他们回答),但是当它在响应之前依赖于人类动作时几乎立即超时(即必须按下按钮才能回答http查询)。
我有以下配置,我想要的是给脚本5秒建立一个连接,然后在超时之前给模块另外12秒回答:
$curl = curl_init("http://10.0.0.100:51813/?getVars=values");
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => "Custom UserAgent",
CURLOPT_FAILONERROR => 1,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 12,
CURLOPT_HTTPHEADER => array('Accept: application/json'),
CURLOPT_INTERFACE => "uap0"
));
$resp = curl_exec($curl);
如果没有建立连接(CURLOPT_CONNECTTIMEOUT
),我希望脚本在5秒后超时,如果已连接,那么如果没有收到回答,我希望它在12秒后超时({ {1}} _ TIMEOUT)。
在我的测试中,它在连接3秒后(平均值)超时,并且在连接后立即超时(因此它不会等待12秒)。
你知道为什么吗?
注意:问题不能来自wifi模块。 WiFi模块获取请求,然后等待用户交互(持续10秒)。如果用户按下按钮,它将发送请求。如果没有,它会关闭连接。如果我从模块的代码中删除等待用户进行交互的部分,它会发送答案,一切正常(除了用户没有交互)