从PHP检测android java客户端连接超时

zaf*_*zaf 5 php java android http

我正在使用使用java的Android设备连接到使用DefaultHttpClient运行PHP的服务器.

我正在做的一个测试是检查java代码是否优雅地处理自己,如果服务器在发送数据时需要很长时间.如果它确实需要很长时间,它会断开连接并重试.

目前我已将连接超时设置为3秒:

HttpConnectionParams.setSoTimeout(httpParameters, 3000);
Run Code Online (Sandbox Code Playgroud)

在服务器上,PHP脚本正在休眠10秒:

sleep(10);
Run Code Online (Sandbox Code Playgroud)

java代码有效,如果脚本花费的时间超过3秒,则抛出java.net.SocketTimeoutException,然后在少量时间后重试.

PHP脚本继续运行,这不是我想要的.我已经尝试在sleep函数之后直接使用connection_aborted进行测试,但它没有捕获已经发生的客户端断开连接.

ignore_user_abort(true);
sleep(10);
print "black hole";
flush();
if(connection_aborted()!=0){
        // You would think this works but it does not.
}
Run Code Online (Sandbox Code Playgroud)

什么是推荐的处理方式?

goa*_*oat 0

不确定现在是否相同,但很久以前我遇到了 php,直到它实际尝试写入或刷新其输出缓冲区时才意识到连接已中止。参见php的flush()和ob_flush();我不需要实际写入任何内容来输出,只需刷新空缓冲区就足以进行检查。

我想 php 前面的网络服务器和其他东西可能会影响这种行为。

您可能需要已经调用过ignore_user_abort(true); 否则 php 可能会停止执行 flash() 调用(默认行为是在意识到连接消失时停止),因此您的 if 语句将永远不会被执行。