Zastosowanie technologii Web Service do tworzenia
Transkrypt
Zastosowanie technologii Web Service do tworzenia
Zastosowanie technologii Web Service do tworzenia wieloplatformowych rozproszonych aplikacji typu klient-serwer Paweł Krakowiak, Karol Kempa, Krzysztof Nieszporek Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok II {[email protected]} {[email protected]} {[email protected]} Streszczenie Celem pracy jest zaprezentowanie możliwości technologii Web Service na przykładzie wieloplatformowej gry karcianej Black Jack. W pierwszym rozdziale omówimy najważniejsze cechy technologii. W kolejnym implementacje gry z jej wykorzystaniem a na koniec wady i zalety Web Services. W niniejszej pracy chcemy podkreślić uniwersalność technologii Web Service oraz możliwość wykorzystania jej na różnych platformach. 1) Wstęp 1.1 Definicja Web Service [3] Web Service to zwarty, samodokumentujący się komponent programowy niezależny od platformy i implementacji dostarczający określoną funkcjonalność w sieci. Organizacjami odpowiedzialnymi za rozwój tej architektury są: W3C (ang. World Wide Web Consortium) [1] OASIS-WS-I (ang. OASIS Web Services Interoperability) [2] Web Service wykorzystuje szereg standardów informatycznych m.in.: XML (ang. Extensible Markup Language) [4], WSDL (ang. Web Service Description Language) [5], SOAP (ang. Simple Object Access Protocol) [6], UDDI (ang. Universal Description, Discovery and Integration) [7]. 1.2 Architektura Web Services (Rys. 1) Każda usługa (ang. Service Provider) posiada reguły określające sposób komunikacji, opisane w dokumencie WSDL. Klienci usługi (ang. Service Requester) współpracują z jej dostawcą na zasadach określonych w dokumencie WSDL. Żądanie wywołania zdalnej metody jak i zwracany rezultat przekazywane są za pomocą komunikatów SOAP. Komunikaty są przeważnie przekazywane z wykorzystaniem protokołu HTTP (ang. Hypertext Transfer Protocol). Usługa sieciowa może być upubliczniona do uniwersalnego rejestru usług sieciowych UDDI, będącego pośrednikiem (ang. Service Broker) między dostawcą a klientem usługi. Dzięki temu oprogramowanie może automatycznie wykrywać i integrować usługi sieciowe w sieci Internet. Rys. 1 Architektura Web Services [13] 1.2.1 WSDL WSDL jest językiem służącym do opisu publicznego interfejsu usługi sieciowej, używającym składni XML. Zawiera informacje o (Rys. 2 ): udostępnionych metodach wraz z argumentami i zwracanymi typami, adresie pod którym dostępna jest usługa, protokole komunikacyjnym jaki został użyty do komunikacji. Klient może dokonać automatycznej transformacji tego opisu do kodu źródłowego obsługującego komunikację sieciową z dostawcą usługi. Rys. 2 Struktura dokumentu WSDL w wersji 1.1 i 2.0 [14] 1.2.2 SOAP SOAP jest protokołem wywoływania zdalnego dostępu do obiektów, wykorzystujący XML do kodowania wywołań i najczęściej HTTP jako protokół transmisyjny (możliwe również HTTPS, FTP, SMTP, BEEP). Niezależny od platformy sprzętowej, czy języka programowania. Wywołanie metody jest konwertowane do dokumentu XML i podlega serializacji. Tak powstały komunikat SOAP przekazywany jest protokołem transmisyjnym do dostawcy usługi. Ten natomiast deserializuje komunikat, wywołuje odpowiednią metodę i w analogiczny sposób zwraca rezultat do klienta (Rys. 3). Rys. 3 Diagram obrazujący komunikację za pomocą protokołu SOAP [15] Komunikat SOAP składa się z następujących elementów: (Rys. 4) Koperty <envelope> (element obowiązkowy) - oznaczający, iż dokument jest komunikatem SOAP Nagłówka <header>(element opcjonalny) - zawiera informacje nagłówkowe Ciała <body> (element obowiązkowy) – zawiera reguły kodujące typy danych (również złożone typy) zdefiniowanych wewnątrz aplikacji oraz reguły dotyczące sposobu wywoływania zdalnych metod i odczytu odpowiedzi. <fault> (element opcjonalny) – zawiera opis błędów, jakie mogą wystąpić podczas przetwarzania komunikatu. Rys. 4 Struktura komunikatu SOAP 2) Wykorzystanie Web Services do stworzenia wieloplatformowe j gry karciane j W ramach pracy stworzono architekturę aplikacji opartą o Web Services. Na rysunku (Rys. 5) przedstawiono diagram obrazujący najważniejsze elementy systemu, w którego skład wchodzą dwie usługi Web Services oraz klient z nich korzystający. Komunikacja jest jednostronna. To klient żąda wywołania zdalnej metody i w wyniku otrzymuje odpowiedź. Należy zwrócić uwagę, że usługa GameServer jest jednocześnie klientem usługi MainServer. Rys 5. Architektura gry opartej o Web Services 2.1 MainServer – Główny serwer Głównym celem MainServer’a jest weryfikacja logujących się użytkowników oraz ich tokenów. Usługa ta posiada połączenie z bazą danych, gdzie przechowywane są informacje o zarejestrowanych użytkownikach. Jeżeli klient po wywołaniu metody login ze swoją nazwą konta oraz hasłem dostępu do niego przejdzie weryfikację, otrzymuje wówczas token dostępny jedynie podczas trwania bieżącej sesji. W momencie gdy jeden z serwerów gry otrzyma od klienta żądanie wykonania akcji, następuje sprawdzenie poprawności tokenu z głównym serwerem, jeśli przejdzie weryfikację następuje przedłużenie czasu trwania sesji dla użytkownika. Gdyby okazało się że sesja wygasła użytkownik musi ponownie zalogować się na głównym serwerze, by móc kontynuować grę. MainServer jest modułem, który może być wykorzystywany przez kolejne serwery innych gier, udostępniając im swoją funkcjonalność. Ponadto wszelkie zmiany w implementacji serwera, jak sposób łączenia się z bazą danych i jego mechanika nie wymagają zmian po stronie klienta. 2.2 GameServer – Serwer gry Serwer gry jest usługą sieciową umożliwiającą podłączenie się do gry, a cała rozgrywka umożliwia zmierzenie się w blackjack z krupierem [12] lub innym graczem. Serwer udostępnia wszystkie konieczne metody klientowi, które pozwolają graczowi podjąć decyzję o właściwym sposobie w jaki będzie kontynuował rozgrywkę. W naszym przykładzie serwer posiada następujące metody: login – umożliwia utworzenie nowej sesji dla gracza na podstawie tokenu przekazanego jako argument wywołania funkcji, zwraca informacje o poprawności logowania lub kod błędu startGame – rozpoczyna nowa rozgrywkę, informacja zwrotna jest podobna do tej z metody login hit – pozwala na dobranie karty przez gracza, w informacji zwrotnej dla klienta jest przekazywana aktualnie wyciągnięta karta, oraz suma punktów gracza. pass – gracz decyduje się na nie dobieranie kolejnych kart, zwracana jest informacja zwrotna z sumą punktów krupiera i wyniku całej partii Serwer gry jest równocześnie klientem głównego serwera na rzecz którego wywoływana jest metoda isValid. Jest to spowodowane tym, iż warunkiem koniecznym wykonania akcji związanych z wywołaniem metody przez klienta jest weryfikac ja aktualności sesji na głównym serwerze. Jeżeli serwer nie potwierdzi ważności sesji gracza, zwracana jest informacja do klienta, że gracz powinien najpierw zalogować się na serwerze. 2.3 Klient gry Aplikacja kliencka posiada zestaw klas wygenerowanych na podstawie dokumentu WSDL i w zależności od platformy może być napisany w różnych językach programowania. Nic nie stoi także na przeszkodzie, aby obsługiwał wiele Web serwisów. Klient stworzony na potrzeby naszej gry obecnie obsługuje dwie usługi – serwer gry (Rys. 6) oraz serwer główny (Rys. 7). Implementuje metodę, którą wymaga serwer główny do zalogowania, oraz metody serwera gry umożliwiające wykonywanie akcji w grze. Po odebraniu odpowiednich komunikatów zwrotnych z serwera następuje prezentacja wyników lub zgłoszenie błędów. Rys. 6 Klient GameServer’a: rozgrywka z krupierem Rys. 7 Klient MainServer’a: proces logowania 2.4 Środowisko pracy W trakcie realizacji projektu pracowaliśmy w środowisku NetBeans v6.9.1 [10] wykorzystując serwer Axis2 v1.5.4 [8] i serwer Tomcat v6.0 [9]. Umożliwiło to stworzenie projektu przystosowanego do wymogów Web Services, szybką kompilację programu oraz spakowanie plików klas do archiwum *.aar i automatyczne umieszczenie pliku w odpowiednim katalogu serwera Tomcat. Środowisko NetBeans umożliwia na bieżąco testować nowe funkcjonalności serwerów w z poziomu SDK (Rys. 8). Pozwoliło nam zaoszczędzić czas potrzebny na poprawną ręczną kompilację plików i umieszczanie archiwum za każdym razem w odpowiednim katalogu serwera zewnętrzne go. Rys. 8 Testowanie Web Servis’u z poziomu Netbeans IDE: publikacja Web Servis’u, wywołanie zdalnej metody i rezultat 3) Podsumowanie W pracy przedstawiono technologie Web Services pozwalającą na tworzenie usług sieciowych, z których można korzystać niezależnie od platformy, czy języka programowania. Dzieląc system na osobne, niezależne moduły, uzyskaliśmy większą kontrolę nad błędami oraz jasno określiliśmy podział zadań w teamie. Każda usługa Web Service dostarcza jasno określonej funkcjonalności, tworząc tym samym komponent wielokrotnego użytku. Logikę gry dostarczają usługi sieciowe, natomiast klient jest odpowiedzialny za interfejs użytkownika. Cała architektura zapewnia możliwość dalszej rozbudowy systemu. Istniały już podobne mechanizmy typu middleware (oprogramowanie pośredniczące) tj. DCE, COBRA, DCOM, RMI, jednak rozwiązania te nie były na tyle uniwersalne by zapewnić kompatybilność w heterogenicznym środowisku jakim jest Internet. Poprzednie rozwiązania ponadto, korzystały z pewnego rodzaju binarnego protokołu do komunikacji. Web Services używają XML-a i protokołu HTTP, dzięki temu nie występują żadne problemy z zaporą firewall. Istnieją dostępne publicznie Web Serwis’y [11], które możemy wykorzystać w naszych aplikacjach, zmniejszając koszty wytwarzania oprogramowania. Zalety Web Services niezależny od platformy i języka programowania, „samo-opisujący się”, dostępny publicznie interfejs, redukuje złożoności systemów informatycznych przez zamykanie pewnej funkcjonalności w komponenty wielokrotnego użytku, możliwość natychmiastowej integracji z innymi systemami ze względu na niskie związki między modułami , ukrycie szczegółów implementacyjnych, zmiany w implementacji usługi nie wymagają zmian w aplikacji klienckiej, wykorzystuje ugruntowane standardy internetowe, możliwość przyrostowej implementacji. Wady Web Services Duży rozmiar komunikatów SOAP, ponieważ są one transportowane w postaci tekstu. Powstały jednak metody takie jak MTOM(ang. Message Transmission Optimization Mechanism) i XOP (ang. XML-binary Optimized Packaging), które po części rozwiązują ten problem. Poprzez wykorzystanie protokołu HTTP i obejściu większości zapór sieciowych pojawiają się problemy z właściwym zabezpieczeniem aplikacji. 4) Bibliografia 1) 2) 3) 4) 5) 6) World Wide Web Consortium, http://www.w3.org The OASIS Web Services Interoperability, http://www.oasis-ws- i.org/ W3C Web service definition, http://www.w3.org/TR/ws-arch/#whatis W3C XML Specification, http://www.w3.org/TR/REC-xml W3C WSDL Specification, http://www.w3.org/TR/WSDL W3C SOAP Specification, http://www.w3.org/TR/SOAP 7) UDDI Specifications, http://www.uddi.org/specifications 8) Serwer Axis2, http://axis.apache.org/axis2/java/core/index.html 9) Serwer Tomcat, http://tomcat.apache.org/download-60.cgi 10) NetBeans IDE, http://netbeans.org/ 11) Web Services Search Engine, http://webservices.seekda.com/ 12) Definicja krupiera, http://pl.wikipedia.org/wiki/Krupier 13) http://en.wikipedia.org/wiki/File:Webservices.png 14) http://en.wikipedia.org/wiki/File:WSDL_11vs20.png 15) http://secangkirkopipanas.com/2010/09/integrasi- net- xml- web-services-dan-java- memenggunakan-ksoap2/