구글 Protobuf 간단한 튜토리얼

Protobuf 무엇입니까

실제로 Protobuf JSON 또는 다른 응용 프로그램이나 프로세스 간의 통신을 위해 사용되는 유사한 데이터 전송 포맷과 XML 사양. 통신 메시지에 의해 전송되는 정보는 Protobuf 정의 된 데이터 구조를 패킹하고 이진 코드 스트림으로 컴파일 된 후 전송 또는 저장된다.

장점 Protobuf

비교, Protobuf는 다음과 같은 장점이 있습니다 :

  • 간단한 충분히
  • 작은 크기의 순서 후 : 메시지의 필요의 크기에만 XML 1/10 ~ 1/3
  • 구문 분석 속도 : 20 ~ 100 파싱의 배 빠른 XML에 비해
  • 다중 언어 지원
  • 더 나은 호환성, 원칙 하향 또는 상향 호환 디자인 좋은 Protobuf을 지원할 수 있어야하는 것입니다

설치 방법 및 Protobuf를 사용하는

설치

파이썬 사용하여 간단한 설치는 다음과

pip install protobuf    # 安装protobuf库
sudo apt-get install protobuf-compiler  # 安装protobuf编译器

컴파일하고 자신을 설치하는 경우, 당신은 참조 할 수 있습니다 자식 명시 적으로 부족하지만, 설치 지침 :

용도

Protobuf 다음 단계를 사용하여 :

  1. 정의 메시지
  2. 그리고 저장 메시지 전달 초기화 메시지
  3. 읽고 메시지를 구문 분석

아래는 프로젝트의 실제 디렉토리 구조를 보여, Protobuf을 사용하는 방법에 대한 실제적인 예입니다 :

.
├── my
│   ├── helloworld_pb2.py
│   ├── helloworld_pb2.pyc
│   └── __init__.py
├── mybuffer.io
├── my.helloworld.proto
├── reader.py
└── writer.py

정의 메시지

Protobuf 메시지 구조는에 의해 호출되는 프로토콜 버퍼 언어 사실, 정의하고 설명하는 언어 프로토콜 버퍼 언어 아래, 버전 2의 선언없이 기본적으로 사용, 두 가지 버전, 버전 2와 버전 3에서 버전 2는 밤을 제공하여, 다음과 같이 우리가 my.helloworld.proto라는 이름의 파일을 정의 가정 :

package my;
message helloworld
{
    required int32 id = 1; required string str = 2; optional int32 wow = 3; } 

그런 다음 우리는 protoc를 사용하여 컴파일 할 필요가

protoc -I=./ --python_out=./ ./my.helloworld.proto
  • -I : 소스 경로 집합입니다
  • --python_out : 컴파일의 결과를 출력 설정을 다른 언어는 해당 언어 옵션을 사용하는 경우
  • 마지막 매개 변수는 프로토를 컴파일 할 파일입니다

이제 메시지의 데이터 구조를 정의한 후, 사용하는 방법에 대해 알아

초기화 메시지 전송 및 저장

다음과 같이 우리는 writer.py 메시지에 의해 초기화하고 파일로 저장 :

from my.helloworld_pb2 import helloworld

def main(): hw = helloworld() hw.id = 123 hw.str = "eric" print hw with open("mybuffer.io", "wb") as f: f.write(hw.SerializeToString()) if __name__ == "__main__": main() 

다음 파일에 저장 직렬화 된 결과 mybuffer.io 될 것이다 writer.py를 수행 한 후에 읽는 방법에 대해 알아

읽기 뉴스와 분석

우리는 읽고 다음과 같이 메시지 reader.py을 통해 구문 분석이 코드는 다음과 같습니다

from my.helloworld_pb2 import helloworld


def main(): hw = helloworld() with open("mybuffer.io", "rb") as f: hw.ParseFromString(f.read()) print hw.id print hw.str if __name__ == "__main__": main() 

참고:



저자 : geekpy
링크 : HTTPS : //www.jianshu.com/p/b723053a86a6
출처 : 제인 책은
저자에 의해 저작권이 있습니다. 상업 무단 전재 공인 저자에 문의하시기 바랍니다, 소스가 표시 비상업적 무단 전재하시기 바랍니다.

추천

출처www.cnblogs.com/ExMan/p/12111221.html