반응형

네트워크 통신/Boost 25

Boost.asio 실시간 채팅 AWS EC2 서버 구현

개요클라이언트가 채팅 서버에 접속하고, 각자 닉네임을 생성한 후에 실시간으로 다른 클라이언트와 채팅을 통해 소통하는 소켓 통신을 구현해 보자로직은 다음과 같다.클라이언트가 서버로 연결 요청을 한다.서버가 연결 요청을 수락한다.클라이언트가 사용할 닉네임을 설정하고 이를 서버에 쓰기 연산을 한다.서버에서 해당 클라이언트의 닉네임을 읽고 기억한다.클라이언트가 동기 쓰기 연산을 통해 하고싶은 말을 서버로 출력한다.서버가 클라이언트로 부터 받은 데이터를 읽고 현재 연결되어 있는 모든 클라이언트에게 데이터를 보낸 클라이언트의 닉네임을 사용하여 쓰기 작업을 한다.모든 클라이언트에서 서버로 부터 받은 데이터를 읽는다. AWS EC2 서버서버는 Linux 환경에서 구현한다, 물론 클라이언트도 구현 할것이다.AWS EC2..

Boost.asio 비동기 TCP 서버

개요비동기 TCP 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.비동기 I/O 및 제어 연산을 한다.한 번에 여러 클라이언트를 처리할 수 있다.일반적인 비동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.비동기 수용 연산을 시작하도록 한다.하나 이상의 스레드를 만들어 Boost.asio 이벤트 루프를 실행시키는 스레드 풀에 추가한다.비동기 수용 연산이 끝나면, 다음 연결 요청을 받아들이는 새로운 연산을 시작하도록 한다.비동기 읽기 연산을 시작시켜 연결된 클라이언트로부터 들어오는 요청을 읽는다.비동기 읽기 연산이 끝나면, 요청을 처리하고..

Boost.asio 병렬 동기 TCP 서버

개요병렬 동기 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.I/O 및 제어 연산을 하는 동안에는 연산이 끝나거나 오류가 발생할 때까지 실행 스레드를 멈춘다.클라이언트를 한 번에 하나 이상 처리할 수 있다.일반적인 병렬 동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.서버가 중단될 때까지 루프를 돈다.클라이언트로부터 연결 요청이 오기를 기다린다.연결 요청이 오면 받아들인다.스레드를 새로 생성하고 새 스레드에서 다음과 같은 작업을 한다.클라이언트로부터 요청 메시지가 오기를 기다린다.요청 메시지를 읽는다.요청을 처리한다.클라이언트에게 응..

Boost.asio 반복 동기 TCP 서버

개요반복적 동기 TCP 서버는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 서버로 동작한다.TCP 프로토콜을 사용해 클라이언트 프로그램과 통신한다.I/O 및 제어 연산을 하는 동안에는 연산이 끝나거나 오류가 발생할 때까지 실행 스레드를 멈춘다.클라이언트를 한 번에 하나씩 처리한다.일반적인 동기 TCP 서버는 다음과 같은 알고리즘에 따라 동작한다.수용자 소켓을 할당하고 특정 TCP 포트에 묶는다.서버가 중단될 때까지 루프를 돈다.클라이언트로부터 연결 요청이 오기를 기다린다.연결 요청이 오면 받아들인다.클라이언트로부터 요청 메시지가 오기를 기다린다.요청 메시지를 읽는다.요청을 처리한다.클라이언트에게 응답 메시지를 보낸다.클라이언트와의 연결을 닫고 소켓을 할당 해지한다. ..

Boost.asio 서버 개요

개요서버는 분산 어플리케이션의 반대쪽 부분인 클라이언트에게 받을 서비스를 제공하는 역할을 맡는다.그리고 클라이언트는 서버가 제공하는 서비스를 받기 위해 서버와 통신한다. 일반적으로 서버는 클라이언트-서버 통신 과정에서 수동적인 역할을 한다.서버는 호스트의 포트에 붙고, 그 포트로 클라이언트가 요청을 보내지 않는지 기다린다.요청이 도착하면 서버는 자신이 제공하는 서비스에 맞춰 동작한다. 서버가 제공하는 서비스에 따라 요청 처리 과정도 매우 다르다.예를 들어, HTTP 서버라면 대체로 요청 메시지에서 원한 파일 내용을 읽어 클라이언트로 보낸다.프록시 서버라면 클라이언트의 요청을 실제로 처리할 다른 서버로 전달한다.좀 더 구체적인 서버들이라면 클라이언트가 제공한 데이터에 대해 복잡한 계산을 거쳐 그 결과를 클..

Boost.asio 비동기 멀티 스레드 TCP 클라이언트

개요클라이언트가 수백 만개의 요청을 만들 수 있고, 최대한 빠르게 처리하고 싶다면, 다중 스레드를 지원해야한다.그러면 여러개의 스레드가 진짜로 동시에 여러 요청을 처리할 수 있다.물론, 클라이언트가 실행되는 컴퓨터에 프로세서가 여러 개 있어야 한다.만약, 컴퓨터에 설치된 프로세서의 수보다 더 많은 스레드를 동시에 실행시키면 스레드 교환에 따른 부하 때문에 어플리케이션의 속도가 오히려 떨어질 수도 있다. 단일 스레드와의 차이는 클래스 인스턴스를 생성할 때 생성자에 생성할 스레드의 개수를 전달한다.해당 정수를 통해 전달한 크기 만큼의 스레드를 생성하여 작업을 병렬처리 할 수 있다.I/O 연산을 하는 부분은 단일 스레드와 큰 차이가 없으므로 하기 글을 참고하길 바란다. Boost.asio 비동기 단일 스레드 ..

Boost.asio 비동기 단일 스레드 TCP 클라이언트

개요가장 간단한 비동기 클라이언트라 하더라도 동기 클라이언트에 비해 구조적으로 복잡하다.비동기 클라이언트에 요청 취소와 같은 기능을 추가하려면 좀 더 복잡해진다.비동기 TCP 클라이언트가 갖춰야 할 사항은 다음과 같다.서버에서 오는 입력을 처리하는 스레드를 따로 둔다.(사용자 인터페이스 스레드)위 스레드는 눈에 띄게 긴 시간 동안 멈추는 일이 없어야 한다.사용자가 다양한 서버로 여러 요청을 보낼 수 있어야 한다.사용자가 요청을 보낸 후 완료되기 전에 취소할 수 있어야 한다. 비동기 TCP 클라이언트 구현#include // OS 식별 도구// Windows XP, Windows Server 2003 이하에서 I/O 작업 취소 기능을 활성화하기 위해 필요// 자세한 내용은 "http://www.boost..

Boost.asio 동기 UDP 클라이언트

개요동기 UDP 클라이언트는 다음과 같은 사항을 만족시키는 분산 어플리케이션이다.클라이언트 서버 통신 모델에서 클라이언트로 동작한다.UDP 프로토콜을 사용해 서버 프로그램과 통신한다.I/O 및 제어 연산을 하는 동안에는 연산이 끝나거나 오류가 발생할 때까지 실행 스레드를 멈춘다.일반적인 동기 UDP 클라이언트는 다음과 같은 알고리즘에 따라 동작한다.클라이언트 프로토콜이 통신할 각 서버 프로그램의 IP 주소와 프로토콜 포트 번호를 알아낸다.UDP 소켓을 할당한다.서버들과 메시지를 주고 받는다.소켓을 할당 해지한다. 동기 UDP 클라이언트 구현#include #include using namespace boost;class SyncUDPClient {public: SyncUDPClient() : ..

Boost.asio 동기 TCP 클라이언트

개요서버 프로그램은 아스키 문자열로 표현된 요청을 받는다, 요청 문자열의 형식은 다음과 같다.EMULATE_LONG_COMP_OP [s] 여기서 [s]는 양수를, 는 아스키로 개행 문자를 나타낸다.서버는 이 문자열을 [s]초 동안 무의미한 연산을 실행해달라는 요청으로 해석한다. "EMULATE_LONG_COMP_OP 10\n" 위와 같은 문자열이 서버에 요청으로 들어왔다고 가정한다면, 서버는 클라이언트가 10초간 무의미한 연산을 한 후 응답을 보내달라고 요청한 것으로 생각한다. 클라이언트의 요청과 마찬가지로, 서버가 보내는 응답도 아스키 문자열로 표현된다.연산이 성공한다면 OK를, 실패한다면 ERROR를 보낸다.  동기 TCP 클라이언트 구현동기 TCP 클라이언트는 다음과 같은 사항을 만족시키는 분산 어..

Boost.asio 클라이언트 개요

개요클라이언트는 서버와 통신하는 어플리케이션이며, 서버가 제공하는 서비스를 사용한다.서버가 제공하는 서비스가 필요하다는 점과 그 서비스를 받기 위해 서버와의 통신을 시작하는 것이 특징이다. 클라이언트 어플리케이션은 서버와 통신할 때 사용하는 전송 계층 프로토콜로 나눌 수 있다.UDP 프로토콜을 쓴다면 UDP 클라이언트다.TCP 프로토콜을 쓴다면 TCP 클라이언트다.물론 클라이언트가 쓸 수 있는 전송 계층 프로토콜은 다른 것도 많다.게다가 여러 가지 프로토콜을 사용해 통신할 수 있는 다중 프로토콜 클라이언트도 있다.하지만 일반적으로 소프트웨어에서 가장 널리 쓰이는 프로토콜은 UDP와 TCP이다. 프로그램을 명세에 따라 설계하는 초기 단계에서 통신 시 사용할 전송 계층 프로토콜을 결정해야 한다.TCP와 UD..

728x90
반응형