1 The Client-Server Model – part II. 2 Connectionless server vs. connection-oriented server.

25
1 The Client-Server Model – part II

Transcript of 1 The Client-Server Model – part II. 2 Connectionless server vs. connection-oriented server.

1

The Client-Server Model – part II

2

Connectionless server vs. connection-oriented server

3

Connectionless vs. Connection-Oriented Server

A connectionless server – Uses a connectionless IPC API (e.g.,

connectionless datagram socket)– Sessions with concurrent clients can be

interleaved. A connection-oriented server

– Uses a connection-oriented IPC API (e.g. stream-mode socket )

– Sessions with concurrent clients can only be sequential unless the server is threaded.

4

EchoServer1 (Connectionless--UDP)

public class EchoServer1 {

public static void main(String[] args) { …

// instantiates a datagram socket for both sending // and receiving data MyServerDatagramSocket mySocket = new

MyServerDatagramSocket(serverPort);

while (true) { // forever loop DatagramMessage request =

mySocket.receiveMessageAndSender();String message = request.getMessage( );

mySocket.sendMessage(request.getAddress( ), request.getPort( ), message);

} //end while

http://ise.gmu.edu/~yhwang1/SWE622/Sample_Codes/chapter5

5

Concurrent client sessions with EchoServer1

c lie n t2

m e s s a g e

e ch o

Ech o S e rv e r1 clie n t 1

m e s s a g e

m e s s a g e

m e s s a g e

e ch o

m e s s a g e

e ch o

e ch o

e ch o

Messages from clients will be lost if the server is not ready yet.

6

EchoServer2 (Connection-oriented--TCP)

ServerSocket myConnectionSocket = new ServerSocket(serverPort);

while (true) { // forever loop MyStreamSocket myDataSocket = new MyStreamSocket

( myConnectionSocket.accept( ) ); boolean done = false; while (!done) { message = myDataSocket.receiveMessage( ); if ((message.trim()).equals (endMessage)){

myDataSocket.close( ); done = true; } //end if else {

myDataSocket.sendMessage(message); } //end else } //end while !done } //end while forever

http://ise.gmu.edu/~yhwang1/SWE622/Sample_Codes/chapter5

7

Two Consecutive client sessions-- EchoServer2

c lie n t2

m e s s a g e

e ch o

Ech o S e rv e r2 clie n t 1

m e s s a g e

m e s s a g e

m e s s a g e

e ch o

m e s s a g e

e ch o

e ch o

e ch o

8

Iterative servers

Vs.

Concurrent servers

9

Concurrent Server

A connection-oriented server can be threaded so that it can serve multiple clients concurrently/simultaneously. Such a server is said to be a concurrent server.

An unthreaded connection-oriented server is said to be an iterative server (e.g., EchoServer2).

10

A Concurrent, Connection-oriented Server

s e rv e r h o s t

s erv ic e

c o n c u r r en t s er v er p r o c es s

A c lien t p r o c es s a t th e h ead o f th e c o n n ec tio n q u eu e

th e s er v er c o n n ec tio n q u eu e

A c lien t p r o c es s w h o s e c o n n ec tio n h as b een ac c ep ted

A c lien t p r o c es s w h o s e c o n n ec tio n h as b een ac c ep ted

th e m ain th r ead ac c ep ts c o n n ec tio n s

a c h ild th r ead p r o c es s esth e p ro to c o l f o r ac lien t p r o c es s

11

Sequence diagram – EchoServer3

ac c ep tc o n n ec tio n

E c h o Se r v e r 3

E c h o Se r v e r 3 t h r e a d 1

E c h o Se r v e r 3 t h r e a d 2

E c h o C lie n t 1E c h o C lie n t 2

12

EchoServer3 (concurrent server)ServerSocket myConnectionSocket

= new ServerSocket(serverPort);

while (true) { // forever loop MyStreamSocket myDataSocket = new MyStreamSocket myConnectionSocket.accept( )); Thread aThread = new Thread(new ServerThread(myDataSocket)); aThread.start();

} //end while forever

http://ise.gmu.edu/~yhwang1/SWE622/Sample_Codes/chapter5

13

ServerThread Classclass ServerThread implements Runnable { static final String endMessage = "."; MyStreamSocket myDataSocket; EchoServerThread(MyStreamSocket myDataSocket) {

this.myDataSocket = myDataSocket; } public void run( ) { boolean done = false; String message; try { // put in here the logic for each client session

while (!done) { message = myDataSocket.receiveMessage( ); if ((message.trim()).equals (endMessage)){ myDataSocket.close( ); done = true; } //end if else { myDataSocket.sendMessage(message); } //end else

} //end while !done }// end try catch (Exception ex) { ….. } } //end run} //end class

14

Echo3Server Concurrent Sessions

c lie n t2

m e s s a g e

e ch o

Ech o S e rv e r3 clie n t 1

m e s s a g e

m e s s a g em e s s a g e

e ch o

m e s s a g e

e ch o

e ch o

e ch o

15

Server Thread class Templateclass ServerThread implements Runnable { static final String endMessage = "."; MyStreamSocket myDataSocket; ServerThread(MyStreamSocket myDataSocket) { this.myDataSocket = myDataSocket; } public void run( ) { boolean done = false; String message; try { //add code here }// end try catch (Exception ex) {

System.out.println("Exception caught in thread: " + ex); } } //end run} //end class

16

Stateful Servers vs. Stateless Servers

17

Session State InformationFor some protocols or applications, a server must maintain information specific to a client during its service session.Consider a network service such as file transfer. A file is typically transferred in blocks, requiring several rounds of data exchanges to complete the file transfer. The dialog during a session proceeds roughly as follows:

Client: Please send me the file foo in directory someDir.Server: Okay. Here is block1 of the fileClient: Got it.Server. Okay. Here is block2 of the fileClient: Got it.…Server. Okay. Here is block3 of the fileClient: Got it.

18

Stateful Server A stateful server maintains stateful information on each

active client. Stateful information can reduce the data exchanged, and

thereby the response time.

...

s en d < f ile I D > , b lo c k 0

G E T f ile n am e

f ile I D

d ata f r o m b lo c k 0 o f f ile

s en d < f ile I D > , b lo c k 1

d a ta f r o m b lo c k 1 o f f ile

f ile I D

f ile p o sit io n

FTP s e r ve r

FTP C l i e n t

...

s en d n ex t b lo c k

G E T f ile n am e

r ead y

d a ta f r o m b lo c k 0 o f f ile

s en d n ex t b lo c k

f ile I D f ile p o sit io n

FTP s e r ve r

FTP C l i e n t

d ata f r o m b lo c k 1 o f f ile

19

Stateful vs. Stateless Server Stateless server is straightforward to code. Stateful server is harder to code, but the state information

maintained by the server can reduce the data exchanged, and allows enhancements to a basic service.

Maintaining stateful information is difficult in the presence of failures.

...

s en d n ex t b lo c k

G ET f ile n am e

r ead y

d ata f r o m b lo c k 0 o f f ile

s en d n ex t b lo c k

f ile I D f ile p o sit io n

FTP s e r ve r

FTP C l i e n t

d ata f r o m b lo c k 1 o f f ile

d a ta is lo s t d u e to n e tw o r k f a ilu r e

c lien t r ec e iv es d a ta as b lo c k 0 o f f ile ;th e tr u e b lo c k 0 is m is s ed .

c lien t r es u b m its r eq u es t

20

Session State Information - 2With a protocol such as ftp, there is a need for the

server to keep track of the progress of the session, such as which block of the file needs to be fetched next. A server does so by maintaining a set of state for each session, known as the session state data. For the file transfer protocol, the session state data may include the name of the file being transferred, and the current block count.

Another example of a stateful protocol is one for a shopping cart application. Each session must maintain state data that keeps track of the identifier of the shopper and the cumulative contents of the shopping cart.

21

State Data StorageIn our example, the state data – the sleep

time interval - is stored in a local variable in the run method of each thread. Since each client is serviced by a separate thread, the local variable suffices as a storage for the state data.  

Using local variables in a thread to store session state data is adequate for a network service server. In complex network applications such as shopping carts, more complex mechanisms are needed for state data storage.

22

HTTP Session

public class SWE622 extends HttpServlet {

public void init(ServletConfig config) throws ServletException{ super.init(config); }

public void service ( HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException

{ …

HttpSession session = req.getSession(true);

session.putValue (“Department", “ISE”);

session.putValue (“University", “GMU”);

… }

23

Stateful vs. Stateless Server

In actual implementation, a server may be– Stateless– Stateful– A hybrid, wherein the state data is distributed

on both the server-side and the client-side.

Which type of server is chosen is a design issue.

24

A client can contact multiple servers A client process may require the services from

different multiple servers. For example, it may obtain a timestamp from a daytime server, data from a database server, and a file from a file server. S 1 S 2 S 3

C lien t

25

SummaryYou have been introduced to the client-server

paradigm in distributed computing. Topics covered include:

The difference between the client-server system architecture and the client-server distributed computing paradigm.

Definition of the paradigm and why it is widely adopted in network services and network applications.

The issues of service sessions, protocols, service location, interprocess communications, data representation, and event synchronization in the context of the client-server paradigm.

The three-tier software architecture of network applications: Presentation logic, application logic, and service logic.

Connectionless server versus connection-oriented server. Iterative server versus concurrent server and the effect on a client

session. Stateful server versus stateless server. In the case of a stateful server: global state information versus

session state information.