Files
caliverse_doc/01. 개발정책/ProtocolConvention.md
2025-05-01 07:27:54 +09:00

4.1 KiB
Raw Permalink Blame History

Protocol Convention

Created Date : 10/27/2023 10:48:15

Last Update Date : 10/27/2023 18:48:15

Version 0.5

Introduction

본 문서는 메타버스 플랫폼 서버 제품 개발에 적용될 Protocol Naming Rule 을 기술한다.

팀원간에 원할한 커뮤니케이션과 유지 보수의 효율화를 위해

가급적 일정한 규칙으로 결정하며 팀의 결정에 따라 적용 범위와그 규칙을 명시한다.

개발시 반드시 본 규정에 따라 작성 하도록 한다.

Protocol Naming Rule은 다음의 표기법을 참고하여 정의 하기로 한다.

Snake case

1. 프로토콜명 정의 (Protocol Name Define)

  • 공통 사항 단어는 기본적으로 명사나 명사형을 사용하며 형용사나 형용사형도 사용 가능하고, 대문자로 표기 한다. 그리고 단어와 단어 사이에 '_' 사용한다.

    요청 패킷은 반드시 응답 패킷을 요청자에게 송신해 주어야 한다.

    요청 패킷 처리후 요청자에게 통지 패킷을 먼저 송신해야 하는 경우는

    요청 패킷과 관련된 정보이고,

    응답 패킷의 길이가 최대 패킷의 크기를 초과할 가능성 있거나,

    설계상 응답 패킷에서 분리하여 통지 패킷으로 보내는 것이 유지 보수에 용이

    할 때이다.

    이 외의 경우엔 응답 패킷을 먼저 송신해 주어야 한다.

  • 언어 공통 사항

종 류 의 미 & 표기 예 시
Prefix 프로토콜 Command ID를 식별하며, 필요하면 정의 한다. CMD
Send Direction 패킷 송신자와 수신자를 식별하며, 방향은 2로 표기 한다. C2S
Packet Action 요청, 응답, 통지를 식별하며, REQ, ACK, NTF로 각각 표기한다. REQ, ACK, NTF
Command 패킷 목적 정의를 식별한다. 컨텐츠명 + 행위명 순으로 표기한다. QUEST_INFO_GET
  • 주요 정의

    1. 공통 패킷
    • C<->S 공통 패킷 : Client <-> Server : C2S, S2C
    • S<->S 공통 패킷 : Server <-> Server : S2S
    • C<->S<->C P2P 공통 패킷 : Client <-> Server <-> Client : C2S2C
    1. 특정 대상 패킷
    • C<->UAS : Client <-> UserAuthServer : C2UAS, UAS2C
    • C<->GS : Client <-> GameServer : C2GS, GS2C
    • C<->CS : Client <-> ChatServer : C2CS, CS2C
    • UAS<->GS : UserAuthServer <-> GameServer : UAS2GS, GS2UAS
    • UAS<->CS : UserAuthServer <-> ChatServer : UAS2CS, CS2UAS
    • GS<->UAS : GameServer <-> UserAuthServer : GS2UAS, UAS2GS
    • GS<->CS : GameServer <-> ChatServer : GS2CS, CS2GS
    • C<->UAS<->C P2P 패킷 : Client <-> UAS <-> Client : C2UAS2C
    • C<->GS<->C P2P 패킷 : Client <-> GS <-> Client : C2GS2C
    • C<->CS<->C P2P 패킷 : Client <-> CS <-> Client : C2CS2C
  • Google Protocol Buffers 사용시

    구성 : Send Direction + Packet Action + Command

    사용의 예)
    C2UAS_REQ_LOGIN : 클라이언트에서 인증서버에 로그인 요청을 송신 한다.
    S2C_NTF_CONNECTABLE_SERVER_INFO : 서버에서 클라이언트에게 접속 가능한 서버 정보를 통지 한다. 
    UAS2C_ACK_LOGIN : 인증서버에서 클라이언트에게 로그인 결과를 송신 한다.
    

2. Nettention ProudNet SDK와 함께 사용하여 프로토콜 정의 하기

  • Google Protocol Buffers 사용시

    전송 프로토콜로 모든 프로토콜을 감싸게 하면 Mashal 과정을 일반화 하여 간편하게 직렬화 할 수 있다.

    따라서 하기와 같이 정의하여 사용하도록 한다.

    사용의 예)
    message AuthProtocol // 전송 프로토콜로 감싸기 위해 정의 한다.
    {
    	oneof msg // 실제 프로토콜을 정의 한다.
    	{
    		C2AS_REQ_LOGIN reqLogin = 1;
    		AS2C_ACK_LOGIN ackLogin = 2;
    
    		S2C_NTF_CONNECTABLE_SERVER_INFO ntfConnetableServerInfo = 3;
    
    		C2AS_REQ_LOGOUT reqLogout = 5;
    		AS2C_ACK_LOGOUT ackLogout = 6;
    	}
    }