programing

AFNetworking에 누락된 ASIHTTP 요청 주요 기능은 무엇입니까?

minimums 2023. 9. 15. 20:52
반응형

AFNetworking에 누락된 ASIHTTP 요청 주요 기능은 무엇입니까?

최근 ASIHTTP 요청으로 업무가 중단되면서 AF네트워크로 관심이 옮겨가는 것 같습니다.

하지만 두 라이브러리의 기능을 아직 제대로 비교하지 못했기 때문에 전환할 때 무엇을 잃을지 모르겠습니다.

지금까지 발견한 주요 차이점은 다음과 같습니다.

  1. AFNetworking은 코드 크기가 훨씬 작습니다(좋습니다).
  2. AFNetworking은 빠른 속도로 개선되고 있습니다. (그래서 아직 성숙하지 않았을 수도 있고, 아직 안정적인 API가 없을 수도 있습니다.
  3. AFNetworking이 NSURL Connection을 사용하기 때문에 50K 이상의 개체를 캐시하지 않을 것이라는 힌트를 본 적이 있습니다.
  4. ASIHTTPRequest는 수동 및 자동(PAC) http 프록시를 매우 잘 지원합니다. AFNetworking이 프록시를 어느 수준으로 지원하는지에 대한 정보를 찾을 수 없습니다.
  5. AFNetworking은 iOS 4+를 필요로 하는 반면 ASIHTTP Request는 iOS 2로 바로 다시 작동합니다. (사실 저에게는 문제가 되지 않지만 일부 사람들에게는 문제가 됩니다.)
  6. AFNetworking(아직)에 영구 캐시가 내장되어 있지는 않지만 영구 캐시에 보류 중인 풀 요청이 있습니다. https://github.com/gowalla/AFNetworking/pull/25

두 도서관의 좋은 비교나 문서화된 경험을 본 사람이 있습니까?

ASIHTTP Request가 너무 좋아서 아쉬웠어요.그러나 ASI의 개발자가 옳았습니다. ASIHTTP 요청은 너무 크고 비대해져서 그조차도 iOS 및 기타 프레임워크의 최신 기능과 동등한 시간을 할애할 수 없었습니다.저는 이제 AF네트워크를 사용하게 되었습니다.

그렇기는 하지만, 저는 ASIHTTP보다 AF네트워크가 훨씬 더 불안정하며, 제가 사용하는 것들에 대해서는 그것을 다듬어야 한다고 말해야 합니다.

화면에 결과를 표시하기 전에 HTTP 소스 100개에 HTTP 요청을 해야 하는 경우가 많고, AFHTTP Network Operation을 operation 큐에 넣었습니다.모든 결과가 다운로드되기 전에 작업 대기열 내부의 모든 작업을 취소한 다음 결과를 보관하는 뷰 컨트롤러를 종료할 수 있기를 바랍니다.

그게 항상 되는 것은 아닙니다.

저는 AFNetworking에서 임의의 시간에 충돌이 발생하는 반면, ASIHTTP Request에서는 이 작업이 완벽하게 작동했습니다.AFNetworking의 어떤 특정 부분이 서로 다른 지점에서 계속 충돌하기 때문에 충돌하고 있는지 말할 수 있으면 좋겠습니다(그러나 대부분의 경우 디버거는 NSURLConnection 개체를 생성하는 NSRunLoop을 가리킵니다).따라서, ASIHTTP 요청이 그랬던 것처럼 완전한 것으로 간주되기 위해서는 AFNetworking이 성숙되어야 합니다.

또한 ASIHTTPR 요청은 클라이언트 인증을 지원하는데, 현재 AFNetworking에는 이 부분이 부족합니다.AFHTTPRequestOperation을 서브클래스하고 NSURLConnection의 인증 방법을 재정의하는 것만이 구현 방법입니다.그러나 NSURL Connection에 관여하기 시작하면 NSURL Connection을 NSO 운영 래퍼 안에 넣고 완료 블록을 작성하는 것이 말처럼 어렵지 않다는 것을 알게 되고 타사 라이브러리를 버리는 것을 방지하는 것이 무엇인지 생각하게 될 것입니다.

ASI는 CFNetworking(C에 기반한 하위 수준의 기초 프레임워크)을 사용하여 다운로드 및 파일 업로드를 가능하게 하고 NSURL 연결을 완전히 생략하며 대부분의 우리 OS X 및 iOS 개발자들이 너무 두려워하는 개념을 터치하기 때문에 완전히 다른 접근 방식을 사용합니다.이 때문에 파일 업로드 및 다운로드, 심지어 웹 페이지 캐시도 더 좋아집니다.

어느 쪽이 좋습니까?말하기 어려워요.AF네트워크가 충분히 성숙해진다면 ASI보다 더 좋아할 것 같습니다.그때까지 ASI, 그리고 OS X와 iOS에서 가장 많이 사용되는 프레임워크 중 하나가 된 모습에 감탄하지 않을 수 없습니다.

편집: 이 게시물 이후로 상황이 조금 달라졌으니 이제 이 답변을 업데이트해야 할 때가 된 것 같습니다.

이 게시물은 얼마 전에 작성되었고, AF네트워크는 충분히 성숙했습니다. 1-2개월 전 AF는 프레임워크에 대한 마지막 불만이었던 POST 작업에 대한 작은 업데이트를 게시했습니다(가장 빠른 업로드가 AF로 실패했지만 ASI로 잘 완료된 이유는 작은 줄 끝 오류).복잡한 인증 방법의 경우 연산을 서브클래스화하여 자신만의 통화를 할 수 있고 AFHTTP 클라이언트는 기본 인증을 식은 죽 먹기로 만들기 때문에 인증은 AF 네트워킹의 문제가 아닙니다.AFHTTP 클라이언트를 하위 분류하면 전체 서비스 소비자를 빠른 시간 내에 만들 수 있습니다.

AF네트워킹이 제공하는 꼭 필요한 UI 이미지 추가는 말할 것도 없습니다.블록과 사용자 지정 완료 블록 및 약간의 영리한 알고리즘을 사용하면 비동기 이미지 다운로드 및 셀 채우기를 통해 테이블 뷰를 쉽게 만들 수 있지만 ASI에서는 대역폭 조절을 위해 작업 대기열을 만들어야 했고 테이블 뷰 가시성에 따라 작업 대기열을 취소하고 재개해야 했습니다.이러한 작업의 개발 시간은 절반으로 줄었습니다.

저도 성공과 실패의 블록을 사랑합니다.ASI에는 완료 블록(실제로 NSO 운영의 완료 블록)만 있습니다.완료에 오류가 있는지 확인하고 그에 따라 조치해야 했습니다.복잡한 웹 서비스의 경우, 모든 "iff"와 "eless"에서 길을 잃을 수 있습니다. AFNetworking에서는 훨씬 더 단순하고 직관적입니다.

ASI는 그 당시에는 훌륭했지만, AF를 사용하면 웹 서비스를 완벽하게 처리하는 방식을 완벽하게 바꾸고 확장 가능한 애플리케이션을 보다 쉽게 만들 수 있습니다.iOS 3 이하를 공략하고 싶지 않다면 더 이상 ASI를 고수할 이유가 없다고 생각합니다.

ASI 대신 AFNetworking을 사용하는 프로젝트를 막 마쳤습니다.이전 프로젝트에서 ASI를 사용한 적이 있습니다. 과거에는 큰 도움이 되었습니다.

AFNetworking에서 누락된 내용(오늘 현재)에 대해 알아야 할 내용입니다.

  • 아무 것도 없어요.

ASI는 사라지고 있습니다.지금 AF를 사용합니다.작고, 효과가 있으며, 앞으로도 계속 지원될 것입니다.특히 API 클라이언트를 위해 보다 논리적으로 구성되어 있습니다.테이블 보기에서 이미지를 비동기적으로 로드하는 것과 같이 자주 사용되는 특수한 경우를 위한 여러 가지 훌륭한 클래스가 있습니다.

AFNetworking은 TLS 클라이언트 인증에 대해 clientCertificateIdentity 및 clientCertificates를 지원하지 않습니다.

우리는 그것을 할 수 있습니다.- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challengeAFURL Connection Operation의 하위 클래스에서 메서드를 사용하지만 쉽지 않습니다.

저는 지금부터 ASI*를 사용하고 있으며 ASI의 파일 업로드 방식을 매우 좋아합니다. AFNetworking으로 도약하게 되어 기쁘지만 AFNetworking의 파일 업로드 지원은 ASI*에 비해 사용이 쉽지 않습니다.

지금까지 는 동기 POST 요청을 할 때 AFNetworking으로 타임아웃을 설정하는 방법을 알 수 없었습니다.업데이트: 드디어 알았어요: https://stackoverflow.com/a/8774125/601466
이제 AFNetworking으로 전환합니다 : ]

==================

애플은 POST의 타임아웃을 240초(240초보다 짧게 설정된 경우)로 재정의하고 변경할 수 없습니다.ASIHTTTP에서는 타임아웃만 설정하면 됩니다.

동기식 POST 요청이 있는 코드 예제:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                                @"doSomething", @"task",
                                @"foo", @"bar",
                                nil];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:baseURL]];

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:requestURL parameters:params];
[httpClient release];

AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NDLog(@"fail! %@", [error localizedDescription]);
}];

NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];

[queue addOperation:operation];
[queue waitUntilAllOperationsAreFinished]; // Stuck here for at least 240 seconds!

[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];
if (![[operation responseString] isEqualToString:@""]) {
    return [operation responseString];
}

return nil;

여기서 타임아웃을 설정하려고 했는데 아무 것도 안 되네요.이 문제로 인해 AFNetworking으로 마이그레이션할 수 없습니다.

여기도 참조:AFNetworking으로 타임아웃을 설정하는 방법

AF네트워크는 대용량 파일을 업로드할 수 있는 기능이 부족합니다.파일 내용이 RAM에 있다고 가정합니다.ASI는 단순히 디스크에서 파일 콘텐츠를 스트리밍할 수 있을 정도로 똑똑했습니다.

ASIHTTTP에서는 개별 요청에 사용자 정보 사전을 첨부할 수 있다는 점이 좋았습니다.가에한인다는는n는에는 이에 대한 없습니다.AFHTTPRequestOperation 우아한 해 낸 적이 ? 우아한 해결책을 생각해 낸 사람이 있습니까?물론 사소한 서브클래스는 차치하고.

AFNetworking은 ASIHTTP Request와 같은 대표자들과 협력하는 것보다 저에게 더 자연스러운 "블록"과 협력합니다.

블록으로 작업하는 것은 마치 자바스크립트에서 익명 기능으로 작업하는 것과 같습니다.

언급URL : https://stackoverflow.com/questions/7529258/what-major-asihttprequest-features-is-afnetworking-missing

반응형