Как закрыть NSURLSession dataTaskWithRequest - PullRequest
0 голосов
/ 20 мая 2019

Я запускаю приложение, которое постоянно ищет данные с сервера.Я создаю nsurlsession с помощью datatask с запросом и обработчиком завершения.Я повторяю запрос каждые тридцать секунд.Проблема в том, что по прошествии определенного времени я получаю dnssd_clientstub Соединение с сервером: сокет не удалось 24 для многих открытых файлов.Я думаю, что мне нужно закрыть каждую сессию после того, как я получу ответ с данными или без данных или использую одну и ту же сессию снова и снова.Я ищу любые предложения.

1 Ответ

0 голосов
/ 21 мая 2019

Я бы посоветовал вам не постоянно восстанавливать новые NSURLSession объекты, а вместо этого убедиться, что вы повторно используете существующий экземпляр.

Если вам абсолютно необходимы отдельные NSURLSession экземпляры, вы можете очистить предыдущие с помощью finishTasksAndInvalidate. Я думаю, что лучше использовать один экземпляр, но это один из способов очистки ваших старых экземпляров, если вам абсолютно необходимо иметь отдельные экземпляры.


Кстати, вы могли бы рассмотреть другой шаблон сети, а именно решение на основе сокетов. Затем, вместо того, чтобы быть похожим на Барта Симпсона на заднем сиденье машины, постоянно спрашивающего «мы уже там?», Вы можете попросить своего сервера сообщить клиенту, когда ему нужно что-то сообщить. Это радикально другой подход, но он намного лучше, чем опрос каждые 30 секунд. Если вы не хотите развертывать собственное решение на основе сокетов, такие среды, как Firebase и Realm , обеспечивают взаимодействие такого рода в реальном времени.

Или, если вы действительно хотите использовать свой собственный сервер и не готовы совершить переход к сокетам (или если у вас нет контроля над интерфейсом RESTful сервера), рассмотрите возможность использования вашего сервера. инициировать push-уведомление, когда есть данные для клиента. Это не так надежно, но все же лучше, чем опрос каждые 30 секунд. Push-уведомления также обладают тем преимуществом, что сервер может сообщать вашим клиентам, когда есть данные, которые необходимо извлечь, даже когда приложение не запущено, и пользователь может выбрать, запускать ли приложение (или приложение может получать данные в фоновом режиме). так что если и когда пользователь запустит его, данные уже есть).

...