лучший метод для обработки ошибок подключения - PullRequest
1 голос
/ 25 августа 2010

Какой лучший рабочий процесс используется при возникновении ошибки подключения. Допустим, у нас есть клиент, который подключается к среднему уровню.

class MyClient{   
...   
  void   callServer(){  
    try{  
      middletier.saveRecord(123);  
    }catch(...){  
      // log the error  
      // what to do next (notify the user, take the same step again)?  
      // reinitialize connection ?  
    }  
  }  
}

Что делать, если произошла ошибка соединения (тайм-аут, разрыв соединения ...)

Должен ли я уведомить пользователя о проблеме с подключением и повторить попытку? Можно ли что-то сделать автоматически и прозрачно для пользователя?

Все, что мне нравится, это не беспокоить пользователя ошибками, а затем сообщать ему, что делать дальше. Итак, каков наилучший рабочий процесс для обработки таких ошибок?

Ответы [ 4 ]

3 голосов
/ 25 августа 2010

Я очень рекомендую Майклу Найгарду "Release It!" который тратит немало времени на объяснение того, как сделать ваше программное обеспечение более надежным.

http://www.pragprog.com/titles/mnee/release-it

2 голосов
/ 25 августа 2010

Зависит ... Если действие вызвано взаимодействием с пользователем, сообщите ему.Пользователь может решить, как часто он хочет повторить попытку.Код может повториться самостоятельно, но если это тайм-аут, то пользователь может подождать несколько минут (или прервать действие, не получая никакой обратной связи).

Если это фоновая задача, попробуйте еще раз после некоторой задержки(но не бесконечно - в конце концов прервите действие).Вы можете повторно инициализировать соединение, чтобы убедиться, что это зависит от используемой технологии и если вы используете пул соединений.

Конечно, если вы хотите тратить больше времени, вы можете по-разному обрабатывать разные ошибки.Прежде всего, отличите постоянные ошибки (повторная попытка через несколько минут не поможет) от случайных ошибок (может быть в следующий раз все будет в порядке).Например, при разорванном соединении вы можете повторить попытку с новым (возможно, брандмауэр сбросил открытое соединение из-за неактивности).Но вы, вероятно, не можете ничего сделать с тайм-аутом (может быть, проблема с конфигурацией сети) или «HTTP 404 не найден» (при условии, что вы не можете изменить URL-адрес, который вы используете для вызова HTTP).мог собрать все эти знания в компоненте «диагностика и ремонт».

Я также рекомендую прочитать «Отпустите!».

2 голосов
/ 25 августа 2010

Это абсолютно зависит от требований приложения.Иногда лучше немедленно уведомить пользователя, а иногда лучше повторить запрос несколько раз, прежде чем информировать пользователя.Вы должны проконсультироваться с вашим клиентом / аналитиком.

0 голосов
/ 25 августа 2010

С точки зрения вызывающей стороны MyClient: Вообще говоря, неудачный вызов метода должен оставить MyClient в состоянии, в котором он находился до вызова.Это означает, что вы должны позаботиться о том, как восстановить состояние до middletier.saveRecord(123);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...