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