Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afAnita Laursen Redigeret for ca. et år siden
1
Hvad består en distribueret applikation af ? Processer der kører på hver deres maskine Tråde - 1 eller flere "letvægtsprocesser" per proces Objekter i et OO sprog vil tråde være i færd med at udføre metoder der hører til et objekt "Agenter" funktionel enhed, f.eks. klient, server, eller komponent heraf
2
Mulige grunde til at vælge distribueret applikation Performance opnå performance-forbedring ved at opdele problem i dele og løse på hver sin maskine Tage hensyn til tilgængelighed af data: afvikle program der hvor data er Robusthed "redundant" ekstra maskine klar til at overtage
3
Hvordan er en distribueret applikation forbundet ? Selve forbindelsen kan f.eks. være en TCP-baseret socketforbindelse Forskellige former for kommunikation: almindelig tekstbaseret: HTTP, SMTP etc. specialdesignede protokoller fjernprocedurekald, f.eks. til webserver: sum = total_ taletid() fjernprocedurekald til specifikke objekter: min_taletid = min_konto.taletid()
4
Distribuerede objekter obj obj.meth(..) result Distribuerede objekter er.. ikke blot at der skabes objekter i en proces (B) men at andre processer (f.eks. A) kan tilgå metoder i processens objekter Proces A (klient) Proces B (server)
5
Distribuerede objekter er også obj obj.meth(..) result Proces A Proces B Skab en instans af klasse xyz A sender klassedefinition af en bestemt klasse til B A giver besked til B om at skabe et objekt, der er en instans af en bestemt klasse Definition af klasse xyz
6
Java som sprog til distribuerede applikationer Netværkssupport ikke med fra fødslen men tidligt med da Sun så Internettet som Java's "killer application" kæmpe standard-bibliotek til netværks-/distribueret programmering Abstrakte interface-s klient behøver kun kende det interface, et objekt på serveren implementerer OO agenter kan implementeres som objekter Java Bytecode er platformsuafhængig muliggør overførsel af klasse-definitioner Fejlhåndtering er i praksis særlig vigtig ved distribuerede applikationer
7
ServerSocket / (alm.) Socket Server SYN klient Lytter til nye requests Kommunikation med klient
8
Sockets i C Klient: fd = socket(..) connect(fd,..) write(fd,..) read(fd,..) close(fd,..) Server: srv_fd = socket(..) bind(srv_fd,..) listen(srv_fd,..) clt_fd = accept(srv_fd,..) read(clt_fd,..) write(clt_fd,..) close(clt_fd,..) close(srv_fd,..) Kun på server Kun på klient
9
Sockets i Java Klient: serverConn = new Socket(..).. = serverConn.getOutputStream().. = serverConn.getInputStream().....write(..)...read() Server: clientConn = new Serversocket(..) clientReq = clientConn.accept().. = clientReq.getOutputStream().. = clientReq.getInputStream().....read()...write(..) Parametre? Java Gently s. 410-412 giver overblik Farley s. 24-27 uddyber.
10
Pseudo Web-server (hændelser) "Browser" "Web-server" GET goodies goodies Gotten GET kommando fortolkes POST goodies DONE POST kommando fortolkes DONE kommando fortolkes
11
SimpleClient.java: opgaver 1. Sende og modtage beskeder 2. Oprette socketforbindelse = skabe socket-objekt 3. Oprette objekt af egen type: SimpleClient Opgave: kog SimpleClient.java ned til 10-12 linjer, der viser hvor (i hvilke klasser/metoder) dette gøres
12
SimpleClient.java skitse af løsning af 1-2-3 public class SimpleClient { protected Socket serverConn; public SimpleClient(String host,int Port) { serverConn = new Socket(host,port); } public static void main(String[] argv) { host = argv[0]; port = Integer.parseInt(argv[1]); SimpleClient client = new SimpleClient(host,port); client.sendCommands(); } public void sendCommands(); {..} } 2. 3. 1.
13
SimpleServer Besked modtaget fra klient: "Get goodies" Parses vhja. instans af class SimpleCmdInputStream.. som genererer objekt, der er instans af class GetCmd SimpleCmd GetCmd Do() Arg"Goodies" cmd Do() returnerer Arg + " gotten"
14
package dcj.examples; import java.lang.*; public abstract class SimpleCmd { protected String arg; public SimpleCmd(String inArg) { arg = inArg; } public abstract String Do(); } public class GetCmd extends SimpleCmd { public GetCmd(String s) { super(s); } public String Do() { String result = super.arg + " gotten.\n"; return result; }
15
Uge 14 - distribuerede objekter og fjernprocedurekald. Uge 15 - tråde Tirsdag d. 4. april Introduktion til begreber Få lille Java Gently program til at køre (eks. 14.6) Litteratur: Farley kap 3 (45-47 + 71-75). Java Gently: Kap 14 (410-412 (sockets) og 425-427 (RMI)). Plan for resten af kurset
16
Farley s. 47 -51 obj obj.meth(..) reference til obj Proces A Proces B Skab en instans af klasse xyz Definition af klasse xyz Illustreres med pseudokode Pseudokode bruger Class.forName("xyz") som loader bytecode "xyz.class"
17
Class.forName(..) og Class.newInstance() Statisk (normal) loadning: MyClass obj = new MyClass(); Dynamisk loadning: Class cls = Class.forName("MyClass"); obj = cls.newInstance(); samme Forudsætter at MyClass.class er tilgængelig lokalt via CLASSPATH
18
RMI obj obj.meth(..) reference til obj Proces A Proces B Skab en instans af klasse xyz Definition af klasse xyz RMI
19
RMI involverer tre processer (jf. Java Gently) obj Proces A Proces B Den tredje proces (C): På serversiden er der også en naming service objektet obj er registreret under navnet "o" o Proces C Har du et objekt ved navn "o" ? Reference til obj
20
De vigtigste krav til et objekt, der skal tilgås fra "fjern" proces Objektet skal implementere et interface (f.eks. "interface Thing") der er tilgængelig på den fjerne proces Interfacet fastlægger hvilke metoder, der må kaldes fra den fjerne proces Feature: Selve implementationen af interfacet må gerne være skjult for den fjerne proces.
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.