8

最近、クライアントがサーバーから突然中止/切断されたときを検出する必要がありました。突然、必ずしもブラウザのSTOPボタンを使用する必要はありません。実際、クライアントはPOST(soapUIを使用)を介して送信されたSOAPメッセージでした。したがって、切断は、受信する前にクライアントを停止( Ctrl + C)するのと同じくらい簡単です。応答。解決策を見つけるまで、私たちは何日もかけて解決策を見つけようとしました。したがって、これは暗黙の応答を伴う質問である可能性がありますが、目標は、同じニーズを持つ他の多くの人々を助けることができる情報を提供することです。

クライアントの切断を検出するためにサーバーを使用した基本的なコードは次のとおりです。

<?PHP
ignore_user_abort(true);            // Continue running the script even when the client aborts/disconnects

sleep(5);                           // Sleep 5 seconds so we can stop the client before it recieves a reponse from the server

echo "RESPONSE sent to the client"; // Response to the Request
ob_flush();                         // Clean output buffer
flush();                            // Clean PHP's output buffer
usleep(500000);                     // Sleep half a second in order to detect if Apache's server sent the Response
echo " ";                           // Echo a blank space to see if it could be sent to the client
ob_flush();                         // Clean output buffer
flush();                            // Clean PHP's output buffer

if(connection_status() != 0) {      // Client aborted/disconnected abruptly
  return -1;
}
else {                              // Client recieved the response correctly
  return 0;
}

?>
4

1 に答える 1

2

PHPの「connection_aborted」関数が問題を解決します。

このリンクで、関数の構文と使用例を確認できます。

于 2012-12-23T17:39:03.880 に答える