반응형

Iterative 기반의 서버, 클라이언트 구현 과정

 

 

이제 기본적인 서버 클라이언트 함수 호출 순서 흐름을 알 것이다.

 

이제는 에코 서버 에코 클라이언트를 구현하기에 앞서

 

에코 서버 클라이언트가 전송하는 문자열 데이터를 그대로 클라이언트에게 재전송하는

 

즉, 문자열 데이터를 에코(echo)시키는 서버이다.

 

그리고 구현하기 전에 Iterative 서버의 구현에 대해 알아보자.

 

-

 

※ Iterative 서버의 구현 ※

 

 

지금까지 우리가 배운 Server 한 클라이언트의 요청에만 응답을 하고 바로 종료된다.

 

그렇기에 연결 요청 대기 큐의 크기도 사실 상 의미가 없었다.

 

그런데 이는 우리가 생각해 오던 서버가 아니다.

 

큐의 크기까지 설정해 놓았다면

 

연결 요청을 하는 모든 클라이언트에게 약속되어 있는 서비스를 제공해야 한다.

 

그러기 위해서는 accept 함수 반복 호출하여 여러 번 요청을 수락하면 된다.

 

일단 아래의 사진으로 Iterative 서버의 함수 호출 순서를 봐보자.

 

-

 

 

-

 

위 사진을 좀 설명하자면

 

accept 함수가 호출된 다음에 입출력 함수 read, write 함수를 호출한다.

 

그리고 나서 close 함수를 호출하고 있는데 이는

 

accept 함수 호출과정에서 생성된 소켓을 대상으로 한다.

 

close 함수까지 호출되었다면 한 클라이언트에 대한 서비스가 완료된 것이다.

 

이어서 또 다른 클라이언트에게 서비스하기 위해 또다시 accept 함수부터 호출한다.

 

그리고 이후 나중에 프로세스 쓰레드에 대해 배우면 둘 이상의 클라이언트에게 동시 서비스 제공이 가능하다.

 

-

 

※ Iterative 에코 서버, 클라이언트 ※

 

 

위에서 설명한 accept 함수를 여러 번 호출하여 여러 개의 연결 요청을 수락하는 형태의 서버

 

Iterative 서버라고 한다.

 

그리고 서버 Iterative 형태로 동작한다고 해도

 

클라이언트 코드에는 차이가 없다.

 

그럼 이번에는 Iterative 형태로 동작하는 에코 서버

 

그리고 이 서버와 함께 동작하는 에코 클라이언트의 구현과정을 보면

 

-

 

1. 서버는 한순간에 하나의 클라이언트와 연결되어 에코 서비스를 제공한다.

 

2. 서버는 총 다섯 개의 클라이언트에게 순차적으로 서비스를 제공하고 종료한다.

 

3. 클라이언트는 프로그램 사용자로부터 문자열 데이터를 입력받아서 서버에 전송한다.

 

4. 서버는 전송 받은 문자열 데이터를 클라이언트에게 재전송한다. 즉, echo 시킨다.

 

5. 서버와 클라이언트간의 문자열 에코는 클라이언트가 문자 'q'를 입력할 때까지 계속한다.

 

-

 

 다음 포스팅에서 echo 서버의 코드를 봐보자.

 

반응형

+ Recent posts