Асинхронный RPC
Асинхронный удаленный вызов процедур (RPC) — это расширение Майкрософт, которое устраняет несколько ограничений традиционной модели RPC, определенных в Open Software Foundation — распределенной вычислительной среде (OSF-DCE). Асинхронный RPC отделяет удаленный вызов процедуры от возвращаемого значения, что устраняет следующие ограничения традиционного синхронного RPC:
- Несколько невыполненных вызовов из однопоточного клиента. В традиционной модели RPC клиент блокируется в удаленном вызове процедуры до тех пор, пока вызов не будет возвращен. Это не позволяет клиенту выполнять несколько невыполненных вызовов, но при этом поток будет доступен для выполнения других действий.
- Медленные или отложенные клиенты. Клиенту, который медленно создает данные, может потребоваться выполнить удаленный вызов процедуры с начальными данными, а затем предоставить дополнительные данные по мере их создания. Это невозможно при использовании обычного (синхронного) RPC.
- Медленные или отложенные серверы. Удаленный вызов процедуры, который занимает много времени, будет связывать поток диспетчеризации на протяжении всего выполнения задачи. При использовании асинхронного RPC сервер может запустить отдельную (асинхронную) операцию для обработки запроса и отправки ответа, когда он будет доступен. Сервер также может отправлять ответ постепенно по мере того, как результаты становятся доступными без необходимости связывать поток диспетчеризации на время удаленного вызова. Сделав клиентское приложение асинхронным, вы можете предотвратить неоправданное связывание клиентского приложения медленным сервером.
- Передача больших объемов данных. Передача больших объемов данных между клиентом и сервером, особенно через медленные каналы, связывает поток клиента и поток диспетчера сервера на время передачи. При использовании асинхронного RPC и каналов передача данных может осуществляться поэтапно, не блокируя выполнение клиентом или сервером других задач.
Вы используете асинхронные механизмы RPC, объявляя функции с помощью атрибута [async]. Так как вы делаете это объявление в файле конфигурации атрибута (ACF), вносить какие-либо изменения в файл языка определения интерфейса (IDL) не требуется; Асинхронный RPC не влияет на проводной протокол (способ передачи данных между клиентом и сервером). Это означает, что синхронные и асинхронные клиенты могут взаимодействовать с асинхронным серверным приложением.
В этом разделе представлен обзор разработки распределенных приложений с помощью асинхронного RPC. Обзор представлен в следующих разделах:
- Объявление асинхронных функций
- Асинхронный RPC на стороне клиента
- Асинхронный RPC на стороне сервера
- Причинно-следственный порядок асинхронных вызовов
- Обработка ошибок
- Асинхронный RPC по протоколу именованного канала
- Использование асинхронного RPC с каналами DCE
- Асинхронный DCOM