php protobufの使用


本文は上述を受け継いで、protobufの使用過程をもたらします
背景:会社C++大物とprotobufプロトコルで通信する
大物とのコミュニケーションの過程で出会った最大の問題は、互いにデータのフォーマットを理解していないなどの疑問であり、ここでも普及の下でデータの伝送過程やバイトストリームなどの内容は、少しこまごましたものであり、許してください.
例を挙げると、次のデータフォーマットの問題は、C++の1つの整数データが符号長整数型であり、符号長整数型がない可能性がある.また、データは16ビットと32ビットの違いがあります.
1バイトが8ビットを占めていることを知っていますが、バイナリに比べて何ビットが何バイトなのかを知っています.
次は本題に入ってprotobufに関する問題を話します.
protobufは3つの部分に分けられ、第1の部分はメッセージコンテンツ長(head)、第2の部分はメッセージコンテンツタイプ(type)、第3の部分はメッセージボディ(body)である.
protobufが入ってきたのはバイナリのパケットなのでphpではpack(),unpack()の2つの関数を用いてパケットを解いてprotobufのパケット関数にデータを渡す必要があります
例を挙げると、
A B    protobuf ,A           (head)      (body)    4     32        ,    (type) 2     16        ,          (body)

   php  ,            ,     

 php  ,    /    ,    pack(),unpack()     

unpack($format,$args)     ,           ,            

                           ,                
https://segmentfault.com/a/1190000008305573

           unpack()    ,

   4  32           unpack      I, 

unpack('Ihead',$str)

    I       head         , PHP            

[
    'head'  => xxxx,
]

   2     16           unpack      s, 

unpack('Ihead/stype',$str)

          

[
    'head'  => xxxx,
    'type'  => xxxx,
]

          2      ,        4     ,      substr()    2       unpack  

        substr     ,      6   head type,       body       substr()    

substr(6,str)

           protobuf