Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Doctor (patrz \samples\rpc\doctor w Platform Software Development Kit (SDK)) jest dobrym przykładem aplikacji, która demonstruje kompromisy projektowe związane z atrybutami tablicowymi i łańcuchowymi. Program Doctor to mała przykładowa wersja lepiej znanego programu, Eliza, opracowana przez badacza sztucznej inteligencji Josepha Weizenbaum w MIT w 1960 roku. Program naśladuje terapeutę przy użyciu prostego dopasowania wzorca, aby reagować na dane wejściowe języka naturalnego.
Program Eliza nagrał następującą sesję.
| Użytkownik | Eliza |
|---|---|
| Mężczyźni są podobnie. | W jaki sposób? |
| Oni zawsze nas irytują o coś lub innego. | Czy można pomyśleć o konkretnym przykładzie? |
| Cóż, mój chłopak zmusił mnie, abym tu przyszła. | Twój chłopak sprawił, że tu przyszłaś. |
| Mówi, że jestem przygnębiony przez większość czasu. | Przykro mi usłyszeć, że jesteś przygnębiony. |
| To prawda, jestem nieszczęśliwy. | Czy myślisz, że przybycie tutaj pomoże ci nie być niezadowolonym? |
| Potrzebuję pomocy; to wydaje się pewne. | Co to znaczy dla Ciebie, jeśli masz jakąś pomoc? |
| Być może mogłabym nauczyć się dogadywać z moją matką. | Powiedz mi więcej o swojej rodzinie. |
| Moja matka dba o mnie. | Kto jeszcze w twojej rodzinie dba o Ciebie? |
| Mój ojciec. | Twój ojciec. |
| Jesteś jak mój ojciec pod pewnymi względami. | Jakie podobieństwo widzisz? |
Program Doctor można podzielić na aplikacje po stronie klienta i po stronie serwera. Po stronie klienta pacjent jest proszony o dane wejściowe i wyświetlana jest odpowiedź lekarza. Strona serwera przetwarza dane wejściowe pacjenta i generuje odpowiedź lekarza. Jest to klasyczny przykład aplikacji klient-serwer: klient jest odpowiedzialny za interakcję użytkownika, podczas gdy serwer obsługuje duże obciążenie obliczeniowe. Nie wiele danych jest przekazywanych do funkcji i zwracanych przez nią, ale ponieważ dane mogą wymagać znacznej ilości przetwarzania, serwer przetwarza je.
Program Doctor używa tablicy znaków dla danych wejściowych i zwraca inną tablicę znaków jako dane wyjściowe. W poniższej tabeli wymieniono cztery sposoby przekazywania tablic znaków między klientem a serwerem oraz atrybutami i funkcjami wymaganymi do zaimplementowania poszczególnych metod.
| Podejście | Atrybuty lub funkcje |
|---|---|
| Liczone tablice znaków | [ size_is], [ length_is], [ ref] |
| Ciągi zarządzane przez stuba | [ ciąg], [ ref], midl_user_allocate na serwerze |
| Ciągi zarządzane przez łączniki | [ łańcuch znaków], [ unikatowy], midl_user_allocate na kliencie i serwerze |
| Funkcja zwracająca ciąg | [ unikatowy] |
W ramach ograniczeń skojarzonych z tymi kombinacjami atrybutów istnieją alternatywne sposoby wysyłania jednej tablicy znaków z klienta do serwera i zwracania innej tablicy znaków z serwera do klienta.
W poniższych tematach przedstawiono kompromisy projektowe między różnymi interfejsami, które mogą zarządzać tymi parametrami.