/Zero

c++/c# network server library

Primary LanguageC#MIT LicenseMIT

Zero

C++ and C# network server library

Build

Need VisualStudio 2012, 2013, 2015

Description

특징 : 서버 제작시 필요한 기본적인 기능들부터 구현하기 까다로운 복잡한 기능들 이를 테면 연결관리부터 대규모 접속이 가능한 분산서버 기능까지 자체 내장하고 있어 사용법을 익히는 것만으로 실시간 서버를 빠르고 간단하게 제작할 수 있습니다.

개발 동기 프라우드넷을 회사에서 약 2년간 사용하다가 이직한 것이 계기가 되었습니다 사용하던 기능들을 계속 사용하고는 싶은데(예를들면 RMI같은 것들) 개인적으로 구매하기엔 너무 고가이기도 하고 새로운 회사에서는 엔진 구매할 의사가 없음을 확인하고 그렇다면 한번 직접 만들어 보자고 생각하여 무작정 개발을 시작하였습니다

그렇게 갑자기 개발 시작한 것이 십 수년간 여러 서버들을 개발하고 상용화한 경험을 통해 짧은 시간에 생각보다 만족스러운 결과를 낼 수 있었습니다

사실 처음부터 네트워크 엔진을 개발하려면 노하우는 물론 많은 시간이 필요한 것이 현실입니다 게다가 쓸만한 엔진들은 비용은 물론 라이센스 문제로 복잡하며 평가판 등은 기능제한이 걸려 있어 사용하기 쉽지 않습니다 따라서 개인적 용도로 개발하였으나 쉽게 서버 제작을 원하는 누구나 사용할 수 있도록 공개하기로 결정하였습니다.

윈도우용 C++서버와 C#서버를 매우 간단히 제작할 수 있으며 클라이언트의 경우엔 현재 윈도우용 C++과 C#을 지원하고 추가로 기타 멀티플렛폼을 위한 Net3.5용 라이브러리와 Unity용 Package도 내장하고 있어 모바일에서도 즉시 사용할 수 있습니다

다만 무료인 만큼 본 라이브러리 사용시 발생하는 모든 문제나 책임은 당연히 사용자 본인에게 있으므로 만약 상용 프로젝트에 사용시 예제와 기능들을 충분히 검토하신후 신중히 사용하시기 바랍니다 (이 라이브러리를 사용하여 진행중인 개인 프로젝트가 있는 만큼 업데이트는 지속적으로 이루어질 계획입니다)

간략히 요약하면 무료 라이브러리이지만 상용 엔진 수준의 기능들과 그 외 여러 편리한 기능들을 내장하고 있습니다. 이를 테면..

서버 입장/퇴장 같은 기본적이지만 까다로운 기능의 단순화 처리 부터, 모바일 및 장애시의 연결복구 같은 편리한 기능들, 복잡하고 구현하기 어려운 서버간의 유저 이동처리와 동기화 기능을 내장하여 대규모 동접을 받을 수 있는 안정적인 분산 서버까지 쉽게 제작할 수 있습니다

여러 기능과 사용법은 예제 프로그램을 통해 확인할 수 있습니다 예제는 현재 아래와 같이 구성되어 있습니다

  • Echo.sln : 가장 기본적인 에코 서버 샘플

  • Sample.sln : 연결장애나 모바일용 연결복구, SQL 및 비동기 쿼리 사용법(C++용 SampleServer)

  • ServerP2P.sln : 서버간 통신 자동화, 분산 서버 구축(서버간 로드벨런싱 + 서버이동 자동화 + 유저 데이터 자동 동기화 처리)

  • Udp.sln : 서버/클라에서 udp포트를 설정하는 방법과 패킷 송수신시 udp를 쉽게 주고 받는 방법을 보여줍니다

  • Group.sln : 그룹을 관리하는 방법(생성/합류/탈퇴/파괴/그룹메세지)을 보여줍니다

  • CasualServer.sln : 캐쥬얼 서버 샘플 (로그인/로비/룸 서버로 이루어진 서버에서 간단히 방 만들기와 입장하는 방법을 보여줍니다, 추가로 룸서버와 로비서버간에 매우 간단히 통신하는 방법과 유저 데이터가 동기화 되고 룸이 분산 관리되는 방법들을 보여줍니다)

  • Sample2/Sample2.sln : C#의 Async/Await을 활용하여 멀티스레드 동기화 문제나 콜백지옥이 없는 서버를 간단히 제작하는 방법을 보여줍니다

참고하거나 관련 코드를 직접 수정하여 사용한 라이브러리 목록은 아래와 같습니다

  • ADO 라이브러리 C++ (네이버까페 온라인서버제작모임 무모님제작)
  • FreeNet (게임코디 태풍의그라운드님 제작) C#

Function

현재 지원환경 : VS 2012필요 (2013, 2015용 lib별도 포함)

  • C++ 서버(w32/x64)
  • C# 서버(w32/x64)
  • C++ 클라이언트(w32/x64)
  • C# 클라이언트(w32/x64)
  • C# 클라이언트(멀티플렛폼용 .Net 3.5이상)
  • Unity (Window, Mac, IOS, Android)

패킷관련 기능

  • 기본처리 : 단순 직렬화
  • 압축처리
  • 암호화 : 자체알고리즘/AES/RSA
  • RMI 기능
  • 클래스 Serialize 자동화 (사용자 실수 방지)
  • Loopback 기능 (커넥션별 스레드 순서보장)
  • TCP 및 UDP옵션 (자동 홀펀칭, 패킷 순서 보장, 스레드 순서보장, Relay지원)

서버 접속 관련부분 자동화

  • 클라이언트에서 서버에 입장/퇴장 2가지 요청만으로 접속관련 과정 단순화 (내부적으로 복잡한 부분과 예외상황을 자동처리) -> 연결/연결실패, 연결인증과정, 연결복구, 연결종료/강제종료 등 접속과 관련된 모든 과정을 자동으로 처리 클라이언트의 비정상적인 종료와 동접 한계시 접속시도와 같은 예외상황까지 자동 처리

그룹 통신 기능 내장

  • 그룹 생성/가입/탈퇴/파괴 명령 제공
  • 그룹 통신 메세지 기능

유저 네트워크 장애/전환 자동복구 기능

  • 일시적 네트워크 장애나 모바일 네트워크 전환시(3G/WIFI) 자동 복구를 위한 즉시복구 함수 내장 : 모바일 연결 전환 감지는 현재 기기별로 직접 감지한후 복구 함수를 호출 해야합니다(IOS경우 Reachability로 감지가능) (여러 모바일 기기를 구입하여 감지까지 완전 자동화 하고 싶었으나 금전 문제로..)
  • 장애 시간 동안에 손실된 모든 패킷들을 자동으로 복원해줍니다
  • 빠른 복구 기능 : 자동 복구 기능외에 추가로 즉시복구 함수제공, 서버측 끊김 감지 이전에도 즉시복원(0.5초 이내)
  • 다양한 복구 옵션 (연결 복구 최대 제한시간 조정 및 여러 복구실패 정책 옵션)

분산서버 기능

  • 서버간 연결과 통신기능 자동화
  • 서버 이동 자동화 : 서버간 자동 로드벨런싱, 유저데이터 동기화 기능 내장, 인증키 자동 관리

멀티코어 활용

  • 모든 실행 부분에 멀티스레드 적용
  • 멀티스레드 실행시 모든 커넥션에 대해 독립적인 스레드에서만 실행됨을 보장함 (스레드 동기화 문제 해방)
  • 모든 커넥션과 이벤트에 대해 자동으로 스레드 로드 밸런싱 처리 (스레드 순서 보장됨)
  • 쉬운 멀티 프로세스 적용 : 서버간 통신 + 로드벨런싱 기능 활용
  • 싱글 스레드 모델 지원 : 로직뿐만 아니라 이벤트, 비동기결과, 서버간 통신결과 처리까지 완벽한 싱글스레드 실행을 보장

비중복 스레드 실행이 보장되는 비동기 함수 내장

  • 멀티스레드 활용과 동시에 해당 기능을 사용하면 스레드 동기화 문제 없이 고성능 서버를 쉽게 제작 가능합니다
  • 비동기 요청과 결과처리를 자동화
  • 비동기 요청시 특정 커넥션을 지정시 결과 실행 시점의 스레드 실행에 대한 비중복실행을 동기화 객체 없이 보장해줌 -> SQL Query, SP 비동기 실행 함수 내장 -> 사용자 정의 비동기 요청 처리