2

アプリがサーバーに接続し、アプリを終了するときにサーバーからログアウトする必要があります。

私の問題は、応答の遅延です。私のアプリはすぐに終了しません。Handler を離れる前に、サーバーからの応答を待つ必要があります。

応答は重要ではありません。get を送信すると、ログアウトされると確信しています。

それで、応答を待たずに(ただし、「取得プロセス」を停止せずに)ログアウトして(http getで)アプリを閉じることは可能ですか?

ブラウザを使用してコンピューターで行うのとまったく同じです。ログアウトボタンをクリックしてから、サーバーからのウェルカムページを待たずにブラウザを閉じます...

短いソケット タイムアウトを追加してみましたが、サーバーはログアウトしません。

これが私の方法です:

private void Disconnect() {

new Thread() {
    @Override
    public void run() {
        String errorMessage = null;
        Message msg = authHandler.obtainMessage();
        try {

            HttpGet httpGet = new HttpGet(LogoutURL);
            HttpResponse httpResponse = httpclient.execute(httpGet);
            if (httpResponse.getStatusLine().getStatusCode() != 200) {
                msg.what = AuthERR;
                authHandler.sendMessage(msg);
                return;
            }

            msg.what = AuthEND;
            msg.obj = choix;
            authHandler.sendMessage(msg);

        } catch (ClientProtocolException e) {
            errorMessage = e.toString();
        } catch (IllegalArgumentException e) {
            errorMessage = e.toString();
        } catch (IOException e) {
            errorMessage = e.toString();
        } catch (Exception e) {
            errorMessage = e.toString();
        } finally {
            if (errorMessage != null) {
                Log.e("Logout", errorMessage);
                msg.what = AuthUnknownHostException;
                msg.obj = errorMessage;
                authHandler.sendMessage(msg);
            }
        }
    }
}.start();
}
4

3 に答える 3

2

HTTP は、半二重の要求応答プロトコルです。応答を受け取るまで、要求がサーバーに到達したという証拠はありません。ネットワークの問題により失われる可能性があります。

于 2013-01-12T13:23:33.733 に答える
2

アプリケーションをすぐに終了した場合、サーバーがログアウト要求を受信したことをどのように確認できますか? サーバーを変更してすぐに応答を送信し、バックグラウンドでログアウトを完了することをお勧めします。これにより、クライアントは迅速に応答します。

于 2013-01-12T13:25:01.303 に答える
0

ライブラリが接続を放棄する方法を提供しない場合は、単純に終了できます。

Thread logoutThread = new LogoutThread();
logoutThread().start();
logoutThread.join(1000);
System.exit(0);

経験的に、ほとんどの場合、1 秒で十分であるとします。もちろん、ログアウト要求がサーバーに配信されないリスクはありますが、ネットワーク アプリケーションでは常にそれが予想されます。

于 2013-01-12T16:53:29.777 に答える