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 다음 단계를 사용하여 :
- 정의 메시지
- 그리고 저장 메시지 전달 초기화 메시지
- 읽고 메시지를 구문 분석
아래는 프로젝트의 실제 디렉토리 구조를 보여, 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
출처 : 제인 책은
저자에 의해 저작권이 있습니다. 상업 무단 전재 공인 저자에 문의하시기 바랍니다, 소스가 표시 비상업적 무단 전재하시기 바랍니다.