Thinking Different




1. 소개

 FlatBuffers 와 Boost Asio 를 활용하여 서버와 클라이언트 채팅 서버 예제를 작성하도록 해보겠습니다.

 

UI의 경우 콘솔방식으로 작성되며, 되도록 초보자가 이해하기 쉽도록 코드로 구성합니다. 코루틴같은 복잡한 코드는 작성하지 않도록 하였습니다.

 

추후 flatbuffers를 활용하여 UI가 있는 일반적인 메신저 서버와 클라이언트를 만들어보는 예제로 진행할 예정입니다.

 

본 예제는 Boost Asio에 대한 상세 설명은 포함하지 않습니다. flatbuffers를 활용하는 예제로서 flatbuffers의 중점에 맞춰서 진행됩니다.

 

 

2. 서버 구조

간단히 채팅 서버 클라이언트의 패킷 프로토콜 구조는 간단하게 아래와 같이 구성하였습니다.

 

각각의 서버와 클라이언트 코드 구조는 아래와 같이 구성됩니다.

 

클라이언트 클래스 다이어그램

 

서버 클래스 다이어그램

 

3. 참고 예제

기본적인 boost asio server / client  소스코드는 boost 문서의 cpp11 예제코드를 사용하였으며, 그 링크는 아래와 같습니다.

 

https://www.boost.org/doc/libs/1_76_0/doc/html/boost_asio/examples/cpp11_examples.html

 

C++11 Examples - 1.76.0

 

www.boost.org

 

 

 

https://www.boost.org/doc/libs/1_76_0/doc/html/boost_asio/example/cpp11/chat/chat_server.cpp

 

doc/html/boost_asio/example/cpp11/chat/chat_server.cpp - 1.76.0

 

www.boost.org

https://www.boost.org/doc/libs/1_76_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp

 

doc/html/boost_asio/example/cpp11/chat/chat_client.cpp - 1.76.0

 

www.boost.org

https://www.boost.org/doc/libs/1_76_0/doc/html/boost_asio/example/cpp11/chat/chat_message.hpp

 

doc/html/boost_asio/example/cpp11/chat/chat_message.hpp - 1.76.0

 

www.boost.org

 

 

4. Nuget 을 활용한 Boost Asio 라이브러리 설치하기

 

Nuget 활용방법은 다음 글을 참고하시기 바랍니다.

nuget 관리자를 활용한 boost 시작하기

 

nuget 관리자를 활용한 boost 시작하기

NuGet은 visual studio 용 패키지 관리자를 말한다. 이는 visual studio 환경에서 라이브러리 관리를 도와주는 플러그인이다. 예부터 visual stdio 환경에서 프로그램을 개발하는 환경은 별도의 라이브러리

copynull.tistory.com

 

 

Nuget에서 설치가 필요한 라이브러리는 아래와 같습니다.

라이브러리 버전
boost 1.76.0.0
boost_chrono-vc142 1.76.0.0
boost_date_time-vc142 1.76.0.0
boost_thread-vc142 1.76.0.0

 

 

설치를 해주면 packages.config 파일에는 다음과 같이 만들어집니다.

 

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="boost" version="1.76.0.0" targetFramework="native" />
  <package id="boost_chrono-vc142" version="1.76.0.0" targetFramework="native" />
  <package id="boost_date_time-vc142" version="1.76.0.0" targetFramework="native" />
  <package id="boost_thread-vc142" version="1.76.0.0" targetFramework="native" />
</packages>