현재 JSON을 사용하고 있으며 클라이언트와 서버 간의 일부 유형의 메시지에 대해 이진 형식으로 이동하려고합니다.
소켓으로 구조체를 읽어야합니까? 프로 티콜 버퍼 / 스 리프트를 사용하십니까?
데이터 배열을 어떻게 표현해야합니까?
데이터 패킹 / 언 패킹에 대한 인터페이스는 어떤 모습입니까?
현재 JSON을 사용하고 있으며 클라이언트와 서버 간의 일부 유형의 메시지에 대해 이진 형식으로 이동하려고합니다.
소켓으로 구조체를 읽어야합니까? 프로 티콜 버퍼 / 스 리프트를 사용하십니까?
데이터 배열을 어떻게 표현해야합니까?
데이터 패킹 / 언 패킹에 대한 인터페이스는 어떤 모습입니까?
답변:
가정 ...
구조를 정의하기 위해 패킷에 공간을 낭비하지 마십시오. IE는 최소한 패킷 유형을 나타내는 바이트를 보낸 다음 수신 된 각 패킷이 해당 유형의 패킷에 대해 사전 정의 된 구조를 따른다고 가정합니다.
소켓으로 구조체를 읽어야합니까? 프로 티콜 버퍼 / 스 리프트를 사용하십니까?
데이터 배열을 어떻게 표현해야합니까?
데이터 패킹 / 언 패킹에 대한 인터페이스는 어떤 모습입니까?
마지막으로, 패킷 크기 는 특히 스냅 샷에서 중요합니다. size = packetSize x 엔티티 x connectedPlayers; 따라서 패킷 당 60 x 10 x 16 = 9,600 바이트를 가질 수 있습니다. 그런 다음 초당 20 번 전송합니다 : = 192,000bps = 187KBps. 이것은 업로드 속도가 높은 밴드입니다. 따라서 가능한 경우 패킷 크기에 기여하는 각 요소를 최소화해야합니다.
이 문서에서는 대단히 도움이되었습니다 : 밸브 멀티 네트워킹
이 문제는 Google과 Facebook에서 해결되었습니다.
Google의 프로토콜 버퍼 — Google은 C ++을 많이 사용합니다.
프로토콜 버퍼는 구조적 데이터를 효율적이지만 확장 가능한 형식으로 인코딩하는 방법입니다. Google은 거의 모든 내부 RPC 프로토콜 및 파일 형식에 프로토콜 버퍼를 사용합니다.
Apache Thrift (이전의 Facebook) :
Thrift는 확장 가능한 언어 간 서비스 개발을위한 소프트웨어 프레임 워크입니다. 소프트웨어 스택과 코드 생성 엔진을 결합하여 C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, JavaScript, Node.js, Smalltalk 및 OCaml간에 효율적으로 원활하게 작동하는 서비스를 빌드합니다.