protocol buffer 소개

protocol buffer 소개
일반적인 데이터 교환 형식
  • json: 일반적인 웹 프로젝트 중 가장 유행하는 것은 json이다.브라우저가 json 데이터에 대한 지원이 매우 좋아서 내장된 함수 지원이 많습니다.
  • xml: 웹 서비스에서 가장 광범위하게 응용되지만 json에 비해 데이터가 더 번거롭다. 쌍으로 된 닫힌 라벨이 필요하기 때문이다.json은 키 값이 맞는 방식을 사용하여 일정한 데이터 공간을 압축할 뿐만 아니라 읽을 수도 있다.
  • protobuf: 후발주자로 구글이 개발한 데이터 형식으로 고성능에 적합하고 응답 속도가 요구되는 데이터 전송 장면이다.프로필buf는 이진 데이터 형식이기 때문에 인코딩과 디코딩이 필요합니다.데이터 자체는 읽을 수 없다.따라서 반서열화된 후에만 진정으로 읽을 수 있는 데이터를 얻을 수 있다.

  • protobuf의 우세와 열세
    우세하다
  • 시리얼화된 후 Json과 XML에 비해 크기가 작아 네트워크 전송에 적합
  • 플랫폼 간 다중 언어 지원
  • 메시지 형식 업그레이드 및 호환성 괜찮음
  • 서열화 반서열화 속도가 매우 빠르고 Json의 처리 속도보다 빠르다
  • 열세
  • 응용이 넓지 않다(xml과 json에 비해)
  • 바이너리 형식으로 인한 가독성 저하
  • 자체 설명 부족
  • protobuf 환경 설치
    [https://blog.csdn.net/hbshhb/article/details/90708132]:
    protobuf 문법
    syntax = "proto3"; 						//      ,      
    package pb;						//    go     
    //message    ,           
    message Person{
    	//      
        string name = 1;
    	//      
        int32  age = 2 ;
    	//      
        repeated string emalis =3;
    	//      
        repeated string phones =4;
        // repeated    ,           go        
    }
    

    메시지 형식 설명
    //주석 형식 주석도 가능한 한 내용 위(필드 수식자) 데이터 형식 필드 이름 = 유일한 번호 라벨 값;
  • 필드 이름:protobuf는 낙타봉식이 아닌 밑줄을 긋는 것을 권장합니다
  • 고유한 번호 레이블: 각 필드를 나타내는 고유한 번호 레이블로 같은 메시지에서 중복될 수 없습니다.이 번호 라벨들은 메시지 2진 형식에서 필드를 표시하고, 메시지가 정의되면 변경할 수 없습니다.설명이 필요한 것은 탭이 1 ~ 15 범위에서 한 바이트로 인코딩되기 때문에 자주 발생하는 메시지 필드에 탭 1 ~ 15를 사용합니다.번호 레이블 크기의 범위는 1~229
  • 입니다.
  • 주석 형식: 방향.proto 파일에 주석을 추가합니다. C/C++/java/Go 스타일의 더블 슬래시 (/) 문법 형식
  • 을 사용할 수 있습니다.
    데이터 형식
    .proto 유형
    Go 유형
    소개하다.
    double
    float64
    64비트 부동 소수점
    float
    float32
    32비트 부동 소수점 수
    int32
    int32
    가변 길이 인코딩을 사용합니다.인코딩 마이너스 효율이 낮습니다. 필드에 마이너스가 있을 수 있으면sint32로 변경하십시오.
    int64
    int64
    가변 길이 인코딩을 사용합니다.인코딩 마이너스 효율이 낮습니다. 필드에 마이너스 값이 있을 수 있으면sint64로 변경하십시오.
    uint32
    uint32
    가변 길이 인코딩을 사용합니다.
    uint64
    uint64
    가변 길이 인코딩을 사용합니다.
    sint32
    int32
    가변 길이 인코딩을 사용합니다.기호 정수 값.이것들은 일반적인 int32s 인코딩 음수보다 더 효과적이다.
    sint64
    int64
    가변 길이 인코딩을 사용합니다.기호 정수 값.이것들은 일반적인 int64s 인코딩 음수보다 더 효과적이다.
    fixed32
    uint32
    항상 4바이트입니다.값이 보통 228보다 크면 uint 32보다 더 유효합니다
    fixed64
    uint64
    항상 8 바이트.값이 보통 256보다 크면 uint64보다 더 유효합니다
    sfixed32
    int32
    항상 4바이트입니다.
    sfixed64
    int64
    항상 8 바이트.
    bool
    bool
    부울 유형
    string
    string
    문자열은 항상 UTF - 8 인코딩 또는 7비트 ASCII 텍스트를 포함해야 합니다.
    bytes
    []byte
    임의의 바이트 시퀀스를 포함할 수 있습니다
    구조체 중첩
    syntax = "proto3"; 						//      ,      
    package pb;						//    go     
    //message    ,           
    message Person{
    	//      
        string name = 1;
    	//      
        int32  age = 2 ;
    	//      
        repeated string emali =3;
    	//      
        repeated PhoneNumber phones  =4;
        // repeated    ,           go        
    }
    
    //message    ,                         
    message PhoneNumber {
        string number = 1;
        int64 type = 2;
    }
    

    열거 유형
    syntax = "proto3"; 						//      ,      
    package pb;						//    go     
    
    //message    ,           
    message Person {
    	string	name = 1;					//  
        int32	age = 2;					//  
    	repeated string emails = 3; 		//    (repeated        )
    	repeated PhoneNumber phones = 4;	//   
    }
    
    //enum    ,           
    enum PhoneType {
    	MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
    
    //message    ,                         
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }
    

    기본 기본값
    메시지가 해결될 때 인코딩된 정보에 특정 요소가 포함되지 않으면 해결된 객체 잠금에 해당하는 도메인이 다음과 같은 기본값으로 설정됩니다.
  • strings에 대해 기본적으로 빈string
  • bytes에 대해 기본적으로 빈 bytes
  • bools의 경우 기본값은false
  • 수치 유형에 대해 기본값은 0
  • 좋은 웹페이지 즐겨찾기