Sunteți pe pagina 1din 37

1. Arhitectura clientserver.

Scurta introducere
Conf. dr. Liviu Gabriel Cretu

Agenda
1. Sockets + protocol
2. Implementarea conceptelor ntr-o
aplicaie real sistemul ABC
3. Exemplu cu un server de e-mail
4. Implementarea conceptelor ntr-o
aplicaie real sistemul ABC

Sockets
Socket (soclu) program (obiect)
folosit pentru a reprezenta fiecare din
capetele unei conexiuni ntre dou
procese ce ruleaz independent ntr-oPort un numr pe 16 bii ce
reea
indentific n mod unic un Socket
TCP (Transport Control Protocol)
Endpoint (capt) combinaie unic
de IP i numr port.
UDP (User Datagram Protocol
Ascult
Solicit conexiune

Client

P
O
R
T

Conexiune stabilit
Flux de date (cerere)
Protocol de reea
Protocol de aplicaie

P
O
Server
R
T

Flux de date (rspuns)


Alocat de sistem
Specificat
de

Java Sockets - CLient


1.
2.
3.
4.
5.

Deschide un Socket
Deschide fluxuri I/O de comunicaii
Comunic (protocol)
Inchide fluxuri
Inchide Socket

Try {
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader (
new InputStreamReader
(echoSocket.getInputStream()));
out.println(Hello Server!);
System.out.println("echo: " + in.readLine());

Java Sockets Server


(client singular)
try (

1. Deschide Socket si ascult


2. Accept solicitarea de
ServerSocket serverSocket =
comunicare (conexiune)
new ServerSocket(4444);
3. Primete flux de date
(intrare)
Socket clientSocket = serverSocket.accept();
4. Proceseaz flux de date
5. Rspunde cu flux de date
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
){
String inputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}

Prelucrri concurente

Cererile concurente sunt, n mod normal, serializate


Pentru prelucrri paralele, se folosesc fire de execuie paralele

Client: acelai cod-surs, nimic nu se schimb


Server: fiecare nou conexiune va fi direcionat ctre un nou fir de execuie (Java
Thread)

Client1

P
O
R
T

Client2

P
O
R
T

Client3

P
O
R
T

T.
Client1
P
O
Server
R
T

T.
Client2
T.
Client3

Server multi-client: abordarea


general
while (true) {
accept a connection;
create a thread to deal with the
client;
}
try (ServerSocket serverSocket = new
ServerSocket(portNumber)) {
while (true) {
new
OrderServerThread(serverSocket.accept()).start();
}
} catch (IOException e) {

Thread

Agenda
1. Sockets
2. Implementarea conceptelor ntr-o
aplicaie real sistemul ABC
3. Email API
4. Implementarea conceptelor ntr-o
aplicaie real sistemul ABC

Proces: Comenzi noi prin


Email
1. Citete ultimul mesaj
primit
2. Dac subiect=new
order
IOEmail

Creeaz comanda
nou

Order

Tradu mesaj text n


obiect Order
Salveaz obiectul
Order n BD
Rspunde cu un
identificator unic al
noii nregistrri

Coninut mesaj e-mail

Mesaj cf. protocol CSV Order:


John Doe
jdoe@gmail.com
No Man's Land City
itemA,
Reply2,cu100identificator
itemB, 10, 25

unic

Protocol CSV Order:


Nume Client
Adresa e-mail
Adresa de livrare
obiect, cantitate,pret
obiect, cantitate,pret

Cerine
1. Expunere operaii Order la distan
cu decuplare complet client-server
2. Definire protocol specific, bazat pe
coninut-text (e.g. XML, CSV,
specific)
3. Implementare componenta IOEmail

Componenta OrderSocket expune


funcionalitatea Order la distan prin Sockets

Dependene: IOEmail i OrderServer

omponenta OrderSocket

Expunere operaii Order la distan:


Server cu Sockets

omponenta OrderSocket

Interfaa CreateCSVOrder

Corespunde singurului UseCase declarat


pentru aceast interfa

omponenta OrderSocket

Implementarea este dependent de


CreateOrder
<dependency>
<groupId>com.babel</groupId>
<artifactId>order</artifactId>
<version>1.0</version>
</dependency>

La un moment dat, va invoca implementar


CreateOrder asociat
(n exemplul de fa, CreateOrderLocalJPA)

Implementarea CreateCSVOrder

traducere mesaj text n ob. Orde


conform Protocol

Execut componenta Order


prin interfaa CreateOrder

omponenta OrderSocket

CreateOrderLocalJPA reutilizeaz
implementarea din Order
<dependency>
<groupId>com.babel</groupId>
<artifactId>order</artifactId>
<version>1.0</version>
</dependency>

Adaug managementul tranzaciei

omponenta OrderSocket

Factory pentru obinerea unui obiect


CreateCSVorder

omponenta OrderSocket

Si un prim testal componentei

(se testeaz implementarea


corect a cerinei)

omponenta OrderSocket

Acum putem implementa si serverul


(varianta Socket, cu suport pentru prelucrri concurente)

omponenta OrderSocket

Implementarea Thread-ului

omponenta OrderSocket

Care worker ?

omponenta OrderSocket

Acum putem realiza testul clientserver

. Se execut CreateOrderServer (procesul va rmne n ateptarea cererilor)


. Se execut de cte ori dorim clientul:

FELICITARI!
Tocmai ati creat un serviciu
Interfaa: CreateCSVOrder
Implementarea: CreateCSVOrderImpl

cu un protocol de comunicare specific


bazat pe siruri de caractere !
Format: CSV
Semantica: reguli de continut

Agenda
1. Sockets
2. Implementarea conceptelor ntr-o
aplicaie real sistemul ABC
3. Email API
4. Implementarea conceptelor ntr-o
aplicaie real sistemul ABC

Javamail API
1. Specific protocol i informaii de
conectare
SMTP, POP3, IMAP - protocoale TCP/IP
pentru trimitere/citire mesaje email

2.
3.
4.
5.

Obine o instan Session


Obine o instan Store
Stabilete conexiunea
Citete /trimite mesaje

Exemplu de citire a ultimului mesaj


primit

Exemplu trimitere e-mail

Componenta IOEmail cu
dependene

Componenta IOEmail
Cerine

IOEmail-PSM

ReadEmailsImpl -

CreateOrderHandler

CreateOrderHandler executa
serviciul Order-Socket

Si testul
(nu uitai s pornii serverul )

n final
Cte servere sunt implicate n
ntregul proces?
Care este clientul fiecrui server?

S-ar putea să vă placă și