Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Podobne dokumenty
Sun RPC/XDR. Dariusz Wawrzyniak 1

Sun RPC/XDR 10. listopada Dariusz Wawrzyniak (IIPP) 1

external Data Representation

external Data Representation

Mechanizmy pracy równoległej. Jarosław Kuchta

Sieciowa komunikacja procesów - XDR i RPC

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Tworzenie aplikacji rozproszonej w Sun RPC

76.Struktura oprogramowania rozproszonego.

Oprogramowanie systemów równoległych i rozproszonych. Wykład 6

Programowanie z użyciem RPC

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

RPC Remote Procedural Call. Materiały do prezentacji można znaleźć na stronie:

Programowanie współbieżne i rozproszone

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Pobieranie argumentów wiersza polecenia

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie obiektowe

Architektura typu klient - serwer. Oprogramowanie systemów równoległych i rozproszonych. Wykład 6. Cechy architektury klient - serwer

Wywoływanie procedur zdalnych

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Wykład 1

Wywoływanie procedur zdalnych

Wywoływanie procedur zdalnych

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Tunelowanie, kapsułkowanie, XDR. 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR.

Wstęp do programowania 1

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Język ludzki kod maszynowy

Obiekty w plikach wykonywalnych, marshaling

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Microsoft IT Academy kurs programowania

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Wprowadzenie do programowania rozproszonego

Wywoływanie metod zdalnych

Programowanie Proceduralne

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Signals + Threads: Qt vs. Boost

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Wprowadzenie do języka Java

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Zdalne wywoływanie procedur RPC 27. października Dariusz Wawrzyniak (IIPP) 1

Zdalne wywoływanie procedur RPC 27. października 2010

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Wywoływanie metod zdalnych

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie rozproszone w języku Java

SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Języki programowania - podstawy

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Język C zajęcia nr 11. Funkcje

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Microsoft Interface Definition Language

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Dostęp do funkcji niskopoziomowych w.net Compact Framework

2 Przygotował: mgr inż. Maciej Lasota

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie Komputerów

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Programowanie strukturalne i obiektowe

Wstęp do Programowania, laboratorium 02

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Michał Jankowski. Remoting w.net 2.0

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Tworzenie i wykorzystanie usług

int tab_a [ 2 ] [ 3 ];

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Język C - podstawowe informacje

Protokół ARP. dr Zbigniew Lipiński. Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Programowanie strukturalne język C - wprowadzenie

Wprowadzenie do szablonów klas

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

4 bity zarezerwowane dla przyszłych zastosowań 11 bitów określających źródło błędu 16 bitów określających rodzaj błędu.

Funkcja (podprogram) void

Co nie powinno być umieszczane w plikach nagłówkowych:

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Kompilator języka C na procesor 8051 RC51 implementacja

SOAP. Autor: Piotr Sobczak

Podstawy programowania w języku C++

Języki i metody programowania. Omówienie języków C, C++ i Java

Dostęp do komponentów EJB przez usługi Web Services

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

PROGRAMOWANIE w C prolog

Transkrypt:

Zdalne wywołania procedur Jarosław Kuchta Programowanie Współbieżne

Podstawy RPC Remote Procedure Call Wywołanie procedur jednego procesu z innego procesu. Proces wywoływany serwer Proces wywołujący - klient Wywoływana procedura jest wykonywana w przestrzeni adresowej wywoływanego procesu (serwera). RPC 2

RPC w sieci protokół opracowany przez firmę Sun popularny w systemie Unix obsługiwany w bibliotekach języka Java współcześnie obsługiwany przez protokoły: SOAP CORBA XML-RPC JSON-RPC RPC 3

XDR External Data Representation standard jednolitej reprezentacji danych w sieci między komputerami o różnych architekturach warunki podstawowe wszystkie typy danych mają rozmiar będący wielokrotnością 4 bajtów, liczby całkowite kodowane w standardzie BigEndian (najpierw starsze bajty) liczby rzeczywiste w formacie IEEE. nadawca i odbiorca muszą znać struktury danych (nie są przekazywane) RPC 4

Filtry XDR xdr_int xdr_float xdr_char xdr_wrapstring (dla typu char *) RPC 5

Filtry XDR dla struktur struktura struct s int i, float x filtr int xdr_s (XDR *xptr, struct s *sptr) return (xdr_int(xptr, &sptr->i) && xdr_float(xptr, &sptr->x); RPC 6

Identyfikacja procedury trzy liczby całkowite: numer programu numer wersji numer procedury RPC 7

Rejestracja procedury int registerrpc( unsigned long PROG, unsigned long VERS, unsigned long PROC, char * ( * proc)(), // adres procedury int (* xdr_arg)(), // adres filtra argumentów int (* xdr_res)()); // adres filtra wyników RPC 8

Przykład procedura udostępniająca czas systemowy #include <rpc/rpc.h> #define PRZYKLAD 0x20000000 #define WERSJA 1 #define CZAS 1 typedef struct tt; void main (void) registerrpc ( PRZYKŁAD, WERSJA, CZAS, czas, xdr_void, xdr_t); svc_run(); extern void podaj_czas (tt *) char *czas (void) static tt t; podaj_czas (&t); return (char *)&t; RPC 9

Wywołanie procedury zdalnej int callrpc( char *server, // nazwa serwera unsigned long PROG, unsigned long VERS, unsigned long PROC, int (* xdr_arg)(), char *arg, // struktura argumentów int (* xdr_res)(), char *res); // struktura wyników RPC 10

Przykład wywołanie procedury udostępniającej czas systemowy #include <rpc/rpc.h> #define PRZYKLAD 0x20000000 #define WERSJA 1 #define CZAS 1 typedef struct tt; void main (void) tt t; callrpc("servername", PRZYKŁAD, WERSJA, CZAS, xdr_void, NULL, xdr_t, &t); int xdr_t (XDR *xptr, tt *tp) extern void korzystaj (tt *); korzystaj (&t); RPC 11

RPC a wykonanie równoległe zwykłe wywołanie RPC wywołanie przez rozgłaszanie main proc main proc proc callrpc registerrpc clnt_broadcast registerrpc proces wywołujący jest wstrzymywany procesy wywoływane są równolegle RPC 12

Wykonanie równoległe int clnt_broadcast( unsigned long PROG, unsigned long VERS, unsigned long PROC, int (* xdr_arg)(), char *arg, int (* xdr_res)(), char *res, int (* res_proc)()); przez rozgłaszanie RPC 13

Przykład wywołanie procedury przez rozgłaszanie #include <rpc/rpc.h> #define PRZYKLAD 0x20000000 #define WERSJA 1 #define CZAS 1 typedef struct tt; int xdr_t (XDR *xptr, tt *tp) extern void korzystaj (tt *); void main (void) tt t; clnt_broadcast( PRZYKŁAD, WERSJA, CZAS, xdr_void, NULL, xdr_t, &t, po_rozgloszeniu); korzystaj (&t); int po_rozgloszeniu (char *t, struct socketaddr_in *addr) return true; RPC 14

Ograniczenia Brak mechanizmu wstrzymywania procesów rozwiązanie: wysokopoziomowe mechanizmy synchronizacji w Unix RPC blokowanie procesu wywoływanego konieczność jawnego podawania nazwy serwera rozwiązanie: rpc_bind zdalne rozgłaszanie przynajmniej jedna procedura musi być wykonywana RPC 15

Asynchroniczne RPC deklaracja procedury (IDL) [ uuid (7f6c4340-eb67-11d1-b9d7-00c04fad9a3b), version(1.0), pointer_default(unique) ] interface AsyncRPC const long DEFAULT_ASYNC_DELAY = 10000; const short APP_ERROR = -1; const char* DEFAULT_PROTOCOL_SEQUENCE = "ncacn_ip_tcp"; const char* DEFAULT_ENDPOINT = "8765"; void NonAsyncFunc(handle_t hbinding, [in, string] unsigned char * pszmessage); void AsyncFunc(handle_t hbinding, [in] unsigned long nasychdelay); void Shutdown(handle_t hbinding); RPC 16

IDL IDL Interface Description Language MIDL kompilator IDL RPC 17

Alternatywa atrybuty ACF ACF Application Configuration File IDL + ACF: interface AsyncRPC [async] AsyncFunc(); RPC 18

Wywołanie asynchroniczne (1) RPC_ASYNC_STATE Async; RPC_STATUS status; // Initialize the handle. status = RpcAsyncInitializeHandle(&Async, sizeof(rpc_async_state)); if (status) // Code to handle the error goes here. Async.UserInfo = NULL; Async.NotificationType = RpcNotificationTypeEvent; Async.u.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); if (Async.u.hEvent == 0) // Code to handle the error goes here. RPC 19

Wywołanie asynchroniczne (2) // Call an asynchronous RPC routine here RpcTryExcept printf("\ncalling the remote procedure 'AsyncFunc'\n"); AsyncFunc(&Async, AsyncRPC_ClientIfHandle, nasychdelay); RpcExcept(1) ulcode = RpcExceptionCode(); printf("asyncfunc: Run time reported exception 0x%lx = %ld\n", ulcode, ulcode); RpcEndExcept RPC 20

Wywołanie synchroniczne tej samej procedury // Call a synchronous routine while the asynchronous procedure is still running RpcTryExcept printf("\ncalling the remote procedure 'NonAsyncFunc'\n"); NonAsyncFunc(AsyncRPC_ClientIfHandle, pszmessage); fprintf(stderr, "While 'AsyncFunc' is running asynchronously,\n" "we still can send message to the server in the mean time.\n\n"); RpcExcept(1) ulcode = RpcExceptionCode(); printf("nonasyncfunc: Run time reported exception 0x%lx = %ld\n", ulcode, ulcode); RpcEndExcept RPC 21

Oczekiwanie na odpowiedź bez blokowania własnego wątku: // This code fragment assumes that Async is a valid asynchronous RPC handle. if (WaitForSingleObject(Async.u.hEvent, INFINITE) == WAIT_FAILED) RpcRaiseException(APP_ERROR); z blokowaniem własnego wątku: if (SleepEx(INFINITE, TRUE)!= WAIT_IO_COMPLETION) RpcRaiseException(APP_ERROR); RPC 22

Obsługa wywołania przez serwer (1) void AsyncFunc(IN PRPC_ASYNC_STATE pasync, IN RPC_BINDING_HANDLE hbinding, IN OUT unsigned long nasychdelay) int nreply = 1; RPC_STATUS status; unsigned long ntmpasychdelay; int i; if (nasychdelay < 0) nasychdelay = DEFAULT_ASYNC_DELAY; else if (nasychdelay < 100) nasychdelay = 100; RPC 23

Obsługa wywołania przez serwer (2) // We only call RpcServerTestCancel if the call // takes longer than ASYNC_CANCEL_CHECK ms if (nasychdelay > ASYNC_CANCEL_CHECK) ntmpasychdelay = nasychdelay/100; for (i = 0; i < 100; i++) Sleep(nTmpAsychDelay); if (i%5 == 0) fprintf(stderr, "\rrunning AsyncFunc (%lu ms) (%d%c)... ", nasychdelay, i+5, PERCENT); status = RpcServerTestCancel( RpcAsyncGetCallHandle(pAsync)); if (status == RPC_S_OK) fprintf(stderr, "\nasyncfunc has been canceled!!!\n"); break; else if (status!= RPC_S_CALL_IN_PROGRESS) printf("rpcasyncinitializehandle returned 0x%x\n", status); exit(status); else Sleep(nAsychDelay); RPC 24

Wysłanie odpowiedzi przez serwer printf("\ncalling RpcAsyncCompleteCall\n"); status = RpcAsyncCompleteCall(pAsync, &nreply); printf("rpcasynccompletecall returned 0x%x\n", status); if (status) exit(status); RPC 25

Przyjęcie odpowiedzi przez klienta status = RpcAsyncCompleteCall( &Async, &Reply); // W tym momencie wynik jest zwracany w Reply RPC 26