내 상용 인터넷 서버 (동시 연결을 허용하는)는 15-20 명의 사람들이 동시에 내 앱을 실행할 때 급격하게 압도적 인 것으로 보입니다. 이 앱은 많은 작업을 수행하기 위해 NSURLSession을 사용하지만 가장 먼저 수행해야 할 작업은 서버에서 비밀번호로 보호 된 부분으로 이동하여 사용자가 앱에서 더 진행할 수 있도록 비밀번호가 포함 된 간단한 텍스트 파일을 가져 오는 것입니다 .NSURLSession은 유지됩니까?
일단 암호 화면을 지나면이 응용 프로그램은 기본적으로 .pdf 뷰어로 기능하며 NSURLSession을 사용하여 사용자가 선택한 다양한 파일을 다운로드하고 표시합니다.
앱을 6 ~ 8 명의 사용자가 동시에 테스트하여 완벽하게 수행합니다. 더 많은 사용자가 동시에 앱을 실행하면 문제가 시작됩니다.
제 질문은 어떻게 NSURLSession이 연결되는지, 또는 더 중요한 것은 제 서버에서 "연결 해제"되는 것입니다.
내 앱은 탭 컨트롤러를 사용하여 볼 수있는 파일 목록을 제공하는 다양한보기 컨트롤러를 표시합니다. 이들 각각은 차례로 다른 View Controller를로드하여 선택한 파일을 표시합니다.
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.allowsCellularAccess = YES;
sessionConfig.timeoutIntervalForRequest = 30;
sessionConfig.timeoutIntervalForResource = 60;
sessionConfig.HTTPMaximumConnectionsPerHost = 150;
sessionConfig.URLCache = NULL;
//Create the session with the newly created sessionConfig.
session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
그때 선택한 파일을 풀다운하기 위해 downloadTask을 만들려면 새로 생성 된 세션을 사용 : 응용 프로그램의 각 뷰 컨트롤러가있는 viewDidLoad 메소드에서 다음 코드를 NSURLSession을 만듭니다. 각 세션이 앱 수명 동안 서버에 계속 연결되어있을 가능성이 있습니까?
ViewController는 모두 모달입니다. 따라서 새로운 ViewController가로드되고 다른 세션이 생성 될 때, ViewController가 닫힐 때 새로 만들어진 세션이 종료된다는 가정이있었습니다. 나는 더 이상 가정이 타당하다고 확신하지 않습니다.
NSURLSession의 단일 인스턴스 (앱 대리자 일 수도 있음)를 만든 다음 각보기 컨트롤러에서 해당 단일 인스턴스를 참조해야합니까? 그 것처럼 보이는 방법이지만 재 작성해야 할 뷰 컨트롤러가 많이 있으며 여기에서 먼저 물어보고 싶었습니다.
각 세션이 앱 실행을 위해 살아 있다면 나는 잠재적으로 앱의 단일 인스턴스와 100 개의 동시 세션을 생성하고 있다고 생각합니다 ... 최고입니다.
도움 주셔서 감사합니다.
그리고 나는 방금 HTTPMaximumConnectionsPerHost 라인에 0을 손가락으로 가리킨 것을 깨달았습니다. 그건 15 살 이었어. 어쩌면 그게 범인 일 수도있어. – Scooter
그래서 각 viewController에서 viewWillDisappear 메서드를 사용하여 [session invalidateAndCancel] 메서드를 실행하고 각보기 컨트롤러에서도 sessionConfig.HTTPMaximumConnectionsPerHost = 1을 설정하는 것이 좋습니다. 나는 이것이 한 번에 서버에 하나의 연결로 앱을 제한하기를 바라고 있습니다. – Scooter