'protocol'에 해당되는 글 1건

  1. 2011.07.04 Google Protocol Buffers - Overview, Language Guide
Google Protocol Buffers

Thrift
http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers
 
Google Protocol Buffer
# Overview 
- C++, Java, Python 지원
- *.proto 파일로 Protocol Format을 정의
- protoc 컴파일러로 *.proto 파일 컴파일
- 생성된 Message 클래스에 있는 Builder 클래스 사용

- 새로운 필드가 쉽게 추가될 수 있고, 중계서버들이 모든 필드를 알필요 없이 단순히 파싱하고 통과시킬 수 있게됨.
- 포맷이 좀더 파악하기 쉽고, 다양한 언어로 다룰 수 있음.
- 자동생성된 시리얼라이징 코드로 인해 수동 파싱을 피할 수 있게 됨
- RPC 요청으로 사용되는 것을 넘어 저장 포맷으로 쓰이기 시작함.
- 서버 RPC Interface가 protocol 파일로 선언되기 시작함.

# Language Guide
- 필드타입열거: scalar 타입, composite 타입.
- 태그할당: 유니크한 정수 태그, 메시지 바이너리 포맷에서 필드 구분, 메시지를 사용하기 시작한 뒤로 변경 불가. 1~15 (1바이트, 자주 등장하는 요소에 할당), 19000~19999는 Protocol Buffers를 위해 예약.
- 필드규칙열거: required - 오직 하나, optional - 0개 또는 1개, repeated - 0개 부터 n개(순서가 보존) [packed=true] 사용해야 효율적. required를 사용보다는 커스텀 Validation을 권장.
- 여러개의 메시지 타입을 하나의 proto파일에 기술 가능
- // 코멘트 가능

- Scala Value Types
http://code.google.com/intl/ko-KR/apis/protocolbuffers/docs/proto.html#scalar
- optional 필드는 디폴트 값을 가질 수 있다. [default = 10] 지정하지 않으면 (empty string, false, 0)
- Enumeration: enum 키워드, 32bit integer
- Other Message Types: 같은 .proto 파일에 정의한 후 필드로 사용 가능 
 - import "myproject/other_proto.proto"
- Nested Types: 
- Groups : deprecated use nested types
- Updating A Message Type
  기존숫자태그 변경X
  새 필드는 optional or repeated이어야 함
  예전 코드에서 파실할 때 새 필드는 무시되나 버려지지는 않음. (Python에서는 버려짐)
  Non-repeated 필드는 삭제가 가능 (단, 새 메시지에서 태그번호가 사용되지 않아야 함) OBSOLETE_ 붙여 이름변경하는것을 추천
  Non-repeated 필드는 extension으로 컨버팅 가능
  int32, uint32, int64, uint64, bool은 호환됨
  sint32, sing64 호환됨
  string, bytes 호환 가능
  Embeded Message는 bytes와 호환 가능
  fixed32는 sfixed32, fixed64, sfixed64와 호환됨
  디폴트 값의 변경은 일반적으로 OK

- Extensions
- Choosing Extension Numbers
- Packages
- Packages and Name Resolution: C++ 스타일, 가장안쪽부터 차례로 찾음.
- Defining Services: RPC
- Options: java_package
- Custom Options
- Generating Your Classes
Posted by 天下太平
,