Обработка ошибок соединения

NSConnection объекты используют сетевые ресурсы, которые могут стать недоступными в любое время, или временно или постоянно.

Вследствие интенсивного сетевого трафика или занятого процесса, отдельные сообщения по соединению могут быть задержаны или проиграли, вызвав ошибку из-за тайм-аута. Ошибка из-за тайм-аута может произойти для исходящего сообщения, означая, что сообщение никогда не отправлялось его получателю, или для ответа на сообщение, успешно отправленное, означая или что сообщению не удалось достигнуть его получателя или что ответ не мог быть поставлен назад исходному отправителю. NSConnection повышения NSPortTimeoutException если после периода заданного времени или исходящее сообщение не отправляется или ответное сообщение, не получен. Вы устанавливаете продолжительности для этих тайм-аутов с NSConnection методы экземпляра setRequestTimeout: и setReplyTimeout:. Приложение может установить обработчик исключений для критических сообщений, и если NSPortTimeoutException повышен это может отправить сообщение снова, проверить, что сервер (или клиент) все еще работает, или примите то, что другие меры это должно восстановить.

В крайнем случае соединение может стать постоянно разъединенным. Когда процесс с помощью распределил катастрофические отказы объектов, например, объекты в том процессе, проданные к другим приложениям просто, прекращают существование. В таком случае, NSConnection объекты, обрабатывающие те объекты, лишают законной силы себя и отправляют NSConnectionDidDieNotification любым наблюдателям. Это уведомление позволяет объектам очистить их состояние как можно больше перед лицом ошибки.

Зарегистрироваться для NSConnectionDidDieNotification, добавьте наблюдателя к значению по умолчанию NSNotificationCenter:

[[NSNotificationCenter defaultCenter] addObserver:proxyUser
        selector:@selector(connectionDidDie:)
        name:NSConnectionDidDieNotification
        object:serverConnection];

Фрагмент выше регистрирует объект proxyUser получить a connectionDidDie: обменивайтесь сообщениями, когда объект serverConnection в приложении отправит NSConnectionDidDieNotification. Это позволяет ему выпускать любые прокси, которые это содержит и обрабатывать ошибку максимально корректно. См., что Уведомление Программирует Темы для получения дополнительной информации об уведомлениях.

Одно ограничение NSConnectionDidDieNotification, однако, то, что NSConnection объект, присоединенный к удаленному NSSocketPort когда удаленный порт становится недопустимым, объект (отправить порт) не может обнаружить. Даже если удаленный порт находится на той же машине, это - истина. Поэтому NSConnection объект не может отправить NSConnectionDidDieNotification когда потеряно соединение. Вместо этого необходимо обнаружить ошибку из-за тайм-аута, когда следующее сообщение отправляется, и лишите законной силы NSSocketPort возразите себе.

В случае клиент-серверной модели в чем сервер никогда не передает клиент, сервер может накопиться NSConnection и NSSocketPort объекты, когда выход клиентских приложений, явно не регистрируя из сервера. Сервер, поэтому, не понимает, что соединение может быть закрыто и выпущено, приведя к утечкам памяти. Если клиент был тих в течение чрезмерного промежутка времени, одно обходное решение для этой ситуации вовлекает клиент, продающий объект к серверу, позволяя серверу «проверить с помощью ping-запросов», или обмениваться сообщениями, клиент. Если клиенту не удается ответить, сервер может предположить, что клиент больше не жив, и он может закрыть соединение.