Asynchroniczny RPC
Asynchroniczne wywołanie procedury zdalnej (RPC) to rozszerzenie firmy Microsoft, które rozwiązuje kilka ograniczeń tradycyjnego modelu RPC zgodnie z definicją w środowisku Open Software Foundation–Distributed Computing Environment (OSF-DCE). Asynchroniczne wywołanie procedury oddziela zdalne wywołanie procedury od wartości zwracanej, co rozwiązuje następujące ograniczenia tradycyjnego synchronicznego wywołania procedury:
- Wiele zaległych wywołań od pojedynczego klienta wątkowego. W tradycyjnym modelu RPC klient jest blokowany w zdalnym wywołaniu procedury, dopóki wywołanie nie zostanie zwrócone. Uniemożliwia to klientowi wykonywanie wielu zaległych wywołań, ale nadal ma dostępny wątek do wykonywania innych czynności.
- Wolno lub opóźnieni klienci. Klient, który powoli generuje dane, może chcieć wykonać zdalne wywołanie procedury z danymi początkowymi, a następnie podać dodatkowe dane podczas ich tworzenia. Nie jest to możliwe w przypadku konwencjonalnego (synchronicznego) RPC.
- Powolne lub opóźnione serwery. Zdalne wywołanie procedury, które trwa długo, spowoduje powiązanie wątku wysyłania przez czas trwania zadania. W przypadku asynchronicznego wywołania procedury RPC serwer może uruchomić oddzielną operację (asynchroniczną), aby przetworzyć żądanie i wysłać z powrotem odpowiedź, gdy jest dostępna. Serwer może również wysyłać odpowiedź przyrostowo, ponieważ wyniki staną się dostępne bez konieczności wiązania wątku wysyłania przez czas trwania połączenia zdalnego. Dzięki asynchronicznemu tworzeniu aplikacji klienckiej można zapobiec niepotrzebnemu wiązaniu aplikacji klienckiej z powolnym serwerem.
- Transfer dużych ilości danych. Transferowanie dużych ilości danych między klientem a serwerem, zwłaszcza w przypadku wolnych łączy, wiąże się zarówno z wątkiem klienta, jak i wątkiem menedżera serwera w czasie trwania transferu. W przypadku asynchronicznego wywołania RPC i potoków transfer danych może odbywać się przyrostowo i bez blokowania klientowi lub serwerowi wykonywania innych zadań.
Korzystasz z asynchronicznych mechanizmów RPC, deklarując funkcje za pomocą atrybutu [asynchronicznego]. Ponieważ tę deklarację należy wprowadzić w pliku konfiguracji atrybutu (ACF), nie trzeba wprowadzać żadnych zmian w pliku IDL (Interface Definition Language). asynchroniczny RPC nie ma wpływu na protokół przewodowy (sposób przesyłania danych między klientem a serwerem). Oznacza to, że zarówno synchroniczne, jak i asynchroniczne klienci mogą komunikować się z aplikacją serwera asynchronicznego.
W tej sekcji przedstawiono omówienie sposobu tworzenia aplikacji rozproszonych przy użyciu asynchronicznego wywołania procedury RPC. Omówienie przedstawiono w następujących sekcjach:
- deklarowanie funkcji asynchronicznych
- asynchroniczne RPC po stronie klienta
- asynchroniczne RPC po stronie serwera
- kolejności przyczynowej wywołań asynchronicznych
- obsługa błędów
- asynchroniczne wywołanie procedury RPC za pośrednictwem protokołu nazwanego potoku
- używanie asynchronicznego wywołania RPC z potokami DCE
- asynchroniczne DCOM