非同期で呼び出したPHPで重い処理をしてもタイムアウトさせない方法
のえる
2021.11.02
こんにちはいくらです。
今回からブログを書いてみることになりました。
ブログは初めてですが、よろしくお願いします。
今僕は、サーバー通信を使ったアプリの開発をしているのですが、
そこで調べたことを書いてみようと思います。
最初はNSURLConnectionを使って実装しようとしていたのですが、
非推奨となっていましたのでシンプルに書き換えてみたいと思います。
NSURLSessionをインスタンス化するときに、デリゲートとスレッドを指定します。
・デリゲートの指定
・スレッドの指定
また、メインスレッドとサブスレッドの選択ができます。
1 2 3 |
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]]; |
1 |
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; |
最終的に下記のような感じになると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// リクエスト作成 NSURL *url = [NSURL URLWithString:@"http://www.yahoo.co.jp/"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // HTTPリクエスト NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; // サブスレッドで実行する NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // ここにエラー処理などを書く // セッションの後始末 [session invalidateAndCancel]; }]; [task resume]; |
これでサーバーとの通信ができると思います。
ただし、iOS9からセキュリティが強化されてますので、アプリの設定が必要です。
詳しくは、下記のサイト様が参考になるかと思います。
いかがでしょうか?
まだ手探りですが、今後もこんな感じで書いていこうかと思います。
POPULAR
いくら
IT Specialist