Оба подхода являются действительными. То, что у вас есть, - это просто синхронная операция и асинхронная операция. например сокеты имеют два режима, доступные в течение многих лет; так, например, функции чтения файла.
Выбор сводится к следующему: может ли ваша клиентская программа дождаться завершения операции или нет. Если это возможно, синхронные операции проще программировать. Else делает асинхронную модель с обратными вызовами.
Что касается повторных попыток - это снова зависит. Повторите попытку? Многие программы просто пробуют 2-3 раза в цикле при сбое. Если повторная попытка повторяется после определенного времени, вы должны хранить информацию о том, что вы пытаетесь сделать где-то. Это где-то может быть программная память или какое-то постоянное хранилище. Для синхронного и асинхронного режимов требуется повторная попытка хранения информации. Асинхронно, потому что, когда вы получаете обратный вызов, вам нужно проверить свой магазин, чтобы выяснить, что вы пытаетесь сделать. В синхронном режиме эта информация много раз неявно хранится в стеке программ, для переменных данных.
Затем также следует повторить попытки выживания программы? Если это так, вам необходимо сохранить информацию в каком-то автономном хранилище. У меня когда-то было приложение для телекоммуникаций; это приложение telecom записывает запись подробностей о вызове в БД. Если по какой-то причине это не удалось, программа просто напишет этот CDR в локальный файл и продолжит работу. Задание cron придет и очистит записи в локальном файле, отправив их в БД. Таким образом, записи звонков, которые предоставили платежную информацию, выдержали даже сбои в работе программы.
Некоторые люди делают такие вещи, используя очереди сообщений. Очереди сообщений обеспечивают гарантированную доставку. клиент отправляет сообщение. Серверная сторона получает его. Сервер удаляет сообщение из Q только в том случае, если он успешно обрабатывает сообщение. Остается сообщение; опасность здесь состоит в том, что сообщение может иметь некоторый постоянный отказ, а затем он попадает в бесконечный цикл.
Получение бесконечных циклов из-за некоторых постоянных сбоев, таких как поставка неправильных параметров для WS, - это то, что вам нужно обрабатывать в любом случае.
Благодарим за подробное объяснение и описание его с точки зрения синхронизации и асинхронности. В приложении, над которым я работаю, крах программы маловероятен.Окружающая среда сильно контролируется и самокорректируется. Более актуальной проблемой является проблема повторного судебного разбирательства. Наиболее целесообразный подход заключается в реализации механизма на основе очереди для вызова WS от клиента. – thcricketfan