2011-04-27 18 views

Odpowiedz

27

Interfejsy Socket API to abstrakcja niskiego poziomu (poziomu transportu), za pomocą której aplikacja Java współdziała z siecią, a także rozszerza się ze zdalnymi klientami i usługami. Gniazda i powiązane interfejsy API obsługują niezawodny strumień wiadomości i niewiarygodne usługi przesyłania wiadomości. Zazwyczaj są one używane w protokołach TCP/IP i UDP/IP, chociaż inne stosy protokołów sieciowych mogą (przynajmniej teoretycznie) być obsługiwane.

RMI to rodzina frameworków i protokołów do implementacji sieci aplikacji na poziomie aplikacji Java. Modeluje interakcje sieciowe jako wywołania metod Java wykonywane na obiektach znajdujących się w innych aplikacjach. Ten model wymaga mechanizmu (zazwyczaj serwera nazw), który pozwala jednej aplikacji na "publikowanie" obiektów, aby inna aplikacja mogła się do nich odwoływać. To (i fakt, że porty RMI są zazwyczaj blokowane domyślnie) oznacza, że ​​nie ma trywialnej ilości wysiłku konfiguracyjnego podczas konfigurowania aplikacji opartych na RMI.

Serwlety to zbiór interfejsów API, które są głównie przeznaczone do implementacji strony serwera komunikacji HTTP; np. do budowania serwerów WWW w Javie. Oni (a dokładniej kontener internetowy, w którym działają) zajmują się szczegółami protokołu HTTP, tak więc programista (teoretycznie) musi tylko zajmować się problemami "aplikacji".

W praktyce programista serwletów i/lub wdrażający musi poradzić sobie z innymi kwestiami, takimi jak mapowanie adresów URL do serwletów do obiektów, bezpieczeństwo i uwierzytelnianie. Ponadto serwlety obsługują tylko stronę serwera interakcji HTTP ... strona klienta musi być obsługiwana przez różne interfejsy API. (Można też argumentować, że Servlety same w sobie nie robią wystarczająco dużo, o czym świadczy proliferacji ram aplikacji internetowych, które zostały zbudowane na szczycie serwletów.)

W skrócie:

  • Gniazda są dla nisko- sieć poziom komunikacji
  • RMI jest na wysokim poziomie Java-to-Java rozproszonego
  • serwlety są na stronach internetowych i serwisów internetowych
+0

Podoba mi się odpowiedź, ale wyjdę niezadowolony. Miałem nadzieję zrozumieć związek między serwletami i gniazdami. Czy serwlety zależą od gniazd. –

+0

@KatedralPillon - * "Czy serwlety zależą od gniazd." * - Na poziomie API nie. Przy realizacji prawdopodobnie tak. Można (w teorii) implementować serwlety bez użycia API 'Socket', jeśli serwlety komunikowały się wyłącznie z klientami hosta lub jeśli zaimplementowano własny odpowiednik funkcji' Socket'; na przykład w natywnym kodzie. –

6
  1. Gniazda - Niewiele prostych połączeń, które bezpośrednio łączą się z TCP/IP. Bardzo proste, ale możesz implikować własną obsługę bufora i radzić sobie z niepełnymi odpowiedziami i limitami czasu w sobie. Brak uwierzytelnienia lub zabezpieczeń.

  2. RMI - obsługuje wszystkie powyższe, < osobistym zdaniem> jest to jeden z gorszych API, że skażone standardów Java </opinię prywatnego>, dość prosty do programu, obsługuje podstawowe błędy sieci, uwierzytelnianie i problemy z bezpieczeństwem . Trudne do skonfigurowania i wdrożenia.

  3. Serwlety - piękne proste API, wszystkie problemy sieciowe są obsługiwane, bezpieczeństwo i uwierzytelnianie za pośrednictwem wtyczek. Brak problemów związanych z wdrażaniem, prosta konfiguracja.

+2

Wyjaśnij swoją opinię. – Pacerier

+2

To jest moja opinia - Wiem, że niektórzy ludzie po prostu kochają RMI, ale uważam, że jest w tym przypadku zbyt wiele klas i interfejsów, to PITA do debugowania, a API zachęca do stylu kodowania z wieloma wywołaniami metod. przez sieć, która umiera po wdrożeniu w rzeczywistej sieci. Z których wszystkie można by przeżyć, ale problemy z rozmieszczeniem są jedynie korekcją. Klasy klienta i serwera muszą być dokładnie takie same, jak tylko przekroczysz 100 komputerów klienckich, których zarządzanie nie jest możliwe. –

+1

Twoja opinia, choć bez wątpienia zabawna, nie odpowiada na pytanie, a problem "pokazania stopera", o którym wspomniałeś, jest nieważny. – EJP

2

Używaj gniazdko realizacji s, aby zaimplementować określony protokół TCP/IP, niezależnie od istniejącego standardu lub własnego niestandardowego protokołu. Masz pełną kontrolę nad wszystkimi aspektami komunikacji sieciowej.

Serwlety obsługują semantykę żądania/odpowiedzi w sensie ogólnym, ale o wiele bardziej prawdopodobne jest używanie HTTPServletów, które obsługują, zgodnie z oczekiwaniami, semantykę żądania/odpowiedzi HTTP. Na przykład serwer WWW lub punkt końcowy oparty na HTTP RESTful.

Użyj RMI dla rozproszonych obiektów Java. Sam RMI jest implementowany za pomocą gniazd (patrz wyżej) i implementuje protokół Java Wire.