HTTP无需等待响应即可获得

时间:2013-01-12 13:19:25

标签: java http get response

我的应用程序连接到服务器,当我退出应用程序时,我必须从服务器注销。

我的问题是响应延迟:我的应用程序没有快速退出,我必须等待服务器的响应才能离开Handler。

响应并不重要,我确信如果我发送了get,它将会退出。

那么,是否可以退出(通过http获取)并关闭我的应用而无需等待响应(但不停止“获取流程”)?

正如我在浏览器的计算机上所做的那样:我点击退出按钮,然后关闭浏览器,而不是等待来自服务器的欢迎页面......

我尝试过添加一个短的套接字超时,但是服务器没有注销。

这是我的方法:

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();
}

3 个答案:

答案 0 :(得分:2)

HTTP是半双工请求 - 响应协议。在得到响应之前,您没有证据表明请求已发送到服务器。由于网络问题,它可能会丢失。

答案 1 :(得分:2)

如果您立即退出应用程序,您如何知道服务器已收到注销请求?我建议立即更改服务器发送响应,然后在后台完成注销,这样您的客户端就会有快速响应。

答案 2 :(得分:0)

如果库没有提供放弃连接的方法,您只需退出。

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

假设,根据经验,在大多数情况下,1秒足够好。当然,存在不向服务器提供注销请求的风险,但在网络应用程序中始终存在这种风险。