programing

배구 시간 제한 기간 변경

codeshow 2023. 8. 26. 00:05
반응형

배구 시간 제한 기간 변경

저는 제 서버에 요청하기 위해 안드로이드용 새로운 발리 프레임워크를 사용합니다.그러나 응답은 있지만 응답을 받기 전에 시간이 초과됩니다.

이 코드를 추가하려고 했습니다.

HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);

HttpClientStackVolley 프레임워크를 다른 정수(50000)로 변환하지만 50초 전에 여전히 시간 초과됩니다.

제한 시간을 긴 값으로 변경할 수 있는 방법이 있습니까?

» Request.setRetryPolicy() 리고생자의 :DefaultRetryPolicy 예: 예: 예: 예를 들어.

JsonObjectRequest myRequest = new JsonObjectRequest(Method.GET,
        url, null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
            }
});

myRequest.setRetryPolicy(new DefaultRetryPolicy(
        MY_SOCKET_TIMEOUT_MS, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

Android Volley 시간 초과를 처리하려면 사용해야 합니다.

정책 재시도

  • Volley는 요청에 대한 재시도 정책을 쉽게 구현할 수 있는 방법을 제공합니다.
  • Voli는 기본 소켓 및 연결을 설정합니다.모든 요청에 대해 시간이 5초로 제한됩니다.

RetryPolicy는 시간 초과가 발생할 때 특정 요청을 재시도하는 방법에 대한 논리를 구현해야 하는 인터페이스입니다.

이 세 가지 매개 변수를 다룹니다.

  • 시간 초과 - 재시도할 때마다 소켓 시간 초과를 밀리초 단위로 지정합니다.
  • 재시도 횟수 - 재시도 횟수입니다.
  • Back Off Multiplier - 모든 재시도 시도에 대해 소켓으로 설정된 지수 시간을 결정하는 데 사용되는 승수입니다.

예를 들어, 다음 값으로 재시도 정책이 생성된 경우

시간 초과 - 3000ms, 재시도 횟수 - 2, 멀티플라이어 백업 - 2.0

재시도 1:

  • time = time + (time * Back Off Multiplier);
  • 시간 = 3000 + 6000 = 9000ms
  • 소켓 시간 초과 = 시간;
  • 소켓 시간 제한이 9초인 발송 요청

재시도 2:

  • time = time + (time * Back Off Multiplier);
  • 시간 = 9000 + 18000 = 27000ms
  • 소켓 시간 초과 = 시간;
  • 소켓 시간 제한이 27초인 발송 요청

그래서 재시도 2가 끝날 때 여전히 소켓 타임아웃이 발생하면 발리는 다음을 던집니다.TimeoutErrorUI 오류 응답 핸들러에 있습니다.

//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. 
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

제 접근 방식에 기여하기 위해서입니다.했듯이, 이미대듯이했답,이듯,RetryPolicy가는 길입니다.그러나 모든 요청에 대해 기본값과 다른 정책이 필요한 경우 기본 요청 클래스에서 정책을 설정할 수 있으므로 요청의 모든 인스턴스에 대해 정책을 설정할 필요가 없습니다.

이와 같은 것:

public class BaseRequest<T> extends Request<T> {

    public BaseRequest(int method, String url, Response.ErrorListener listener) {
        super(method, url, listener);
        setRetryPolicy(getMyOwnDefaultRetryPolicy());
    }
}

저의 경우 이 BaseRequest에서 확장된 GsonRequest가 있으므로 특정 요청에 대한 정책을 설정하는 것을 잊지 않으며 특정 요청이 필요할 경우에도 정책을 재정의할 수 있습니다.

/**
 * @param request
 * @param <T>
 */
public <T> void addToRequestQueue(Request<T> request) {

    request.setRetryPolicy(new DefaultRetryPolicy(
            MY_SOCKET_TIMEOUT_MS,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    getRequestQueue().add(request);
}
req.setRetryPolicy(new DefaultRetryPolicy(
    MY_SOCKET_TIMEOUT_MS, 
    DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

설정할 수 있습니다.MY_SOCKET_TIMEOUT_MS100파운드로설정할 값은 밀리초 단위입니다.DEFAULT_MAX_RETRIES0일 수 있습니다. 기본값은 1입니다.

int MY_SOCKET_TIMEOUT_MS=500;

 stringRequest.setRetryPolicy(new DefaultRetryPolicy(
                MY_SOCKET_TIMEOUT_MS,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

다른 방법은 사용자 정의 JsonObjectRequest에서 다음과 같이 수행할 수 있습니다.

@Override
public RetryPolicy getRetryPolicy() {
    // here you can write a custom retry policy and return it
    return super.getRetryPolicy();
}

출처: Android Volley 예제

위의 모든 솔루션이 귀사에 적합하지 않은 경우 대체 솔루션

기본적으로 발리는 두 시간 모두에 대해 시간 초과를 동일하게 설정합니다.setConnectionTimeout()그리고.setReadTimeout()의 가치로RetryPolicy저 같은 경우에는.Volley큰 데이터 청크에 대해 시간 초과 예외를 발생시킵니다. 자세한 내용은 다음을 참조:

com.android.volley.toolbox.HurlStack.openConnection(). 

내 해결책은 확장되는 클래스를 만드는 것입니다.HttpStack내 것으로setReadTimeout()정책.그런 다음 만들 때 사용합니다.RequestQueue다음과 같이:

Volley.newRequestQueue(mContext.getApplicationContext(), new MyHurlStack())

나는 결국 메소드를 추가했습니다.setCurrentTimeout(int timeout)에게RetryPolicy그리고 그것은 구현됩니다.DefaultRetryPolicy.

그리고 나서 저는 추가했습니다.setCurrentTimeout(int timeout)요청 클래스에서 호출합니다.

이것이 효과가 있는 것 같습니다.

그나저나 나의 게으름에 대해 미안하고 오픈소스에 대해 만세.

언급URL : https://stackoverflow.com/questions/17094718/change-volley-timeout-duration

반응형