Поделиться через


Асинхронный RPC

Асинхронный вызов удаленной процедуры (RPC) — это расширение Майкрософт, которое устраняет несколько ограничений традиционной модели RPC, как определено в среде Open Software Foundation —Distributed Computing Environment (OSF-DCE). Асинхронный RPC отделяет удаленный вызов процедуры от возвращаемого значения, который разрешает следующие ограничения традиционного синхронного RPC:

  • Несколько невыполненных вызовов из одного потока клиента. В традиционной модели RPC клиент блокируется в удаленном вызове процедуры до возврата вызова. Это предотвращает наличие нескольких невыполненных вызовов клиента, но при этом его поток доступен для выполнения других действий.
  • Медленные или отложенные клиенты. Клиент, который медленно создает данные, может потребоваться выполнить удаленный вызов процедуры с начальными данными, а затем предоставить дополнительные данные по мере его создания. Это невозможно с обычным (синхронным) RPC.
  • Медленные или отложенные серверы. Удаленный вызов процедуры, который занимает много времени для завершения, будет связывать поток отправки в течение длительности задачи. С помощью асинхронного RPC сервер может запустить отдельную (асинхронную) операцию для обработки запроса и отправки обратного ответа, когда он доступен. Сервер также может постепенно отправлять ответ по мере того, как результаты становятся доступными без необходимости связать поток отправки в течение длительности удаленного вызова. Сделав клиентское приложение асинхронным, вы можете предотвратить ненужную привязку клиентского приложения к медленному серверу.
  • Передача больших объемов данных. Передача больших объемов данных между клиентом и сервером, особенно через медленные связи, связывает как поток клиента, так и поток диспетчера серверов в течение длительности передачи. При асинхронном RPC и каналах передача данных может выполняться постепенно и без блокировки клиента или сервера от выполнения других задач.

Вы используете преимущества асинхронных механизмов RPC путем объявления функций с атрибутом [асинхронного] . Так как вы делаете это объявление в файле конфигурации атрибутов (ACF), вам не нужно вносить изменения в файл языка определения интерфейса (IDL); асинхронный RPC не влияет на протокол провода (как данные передаются между клиентом и сервером). Это означает, что синхронные и асинхронные клиенты могут взаимодействовать с асинхронным серверным приложением.

В этом разделе представлен обзор разработки распределенных приложений с помощью асинхронного RPC. Обзор представлен в следующих разделах: