作为通用的协议数据包序列化/反序列化工具,灵活高效的google protocol buffer以众多的优化力压大量的序列化工具和机制: XML,json…对于大规模的服务,系统之间由多个模块构成,由多种开发语言来协作完成系统中不同的部分。在这种情况下,有一个问题需要解决,那就是如何设计一种通用的数据序列化和反序列化的机制使得可以在系统的多个模块,多种开发语言中进行灵活高效的数据通信。基于google protocol buffer的特点,这种情况下选择google protocol buffer是一个很好的方向。当前的google protocol buffer仅支持: C++,Java,Python。PHP作为WEB开发的主力居然没有得到google protocol buffer的官方支持实在是有一些遗憾。好在开源的力量是巨大的,当前就有一个google protocol buffer支持PHP的接口实现:pb4php。
使用方法:
// .proto文件如下:
message Person
{
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
// a simple comment
repeated PhoneNumber phone = 4;
optional string surname = 5;
}
message AddressBook {
repeated Person person = 1;
}
// 序列化操作:
$book = new AddressBook();
$person = $book->add_person();
$person->set_name('Kordulla');
$person->set_surname('Nikolai');
$phone_number = $person->add_phone();
$phone_number->set_number('49');
$phone_number->set_type(Person_PhoneType::WORK);
$phone_number = $person->add_phone();
$phone_number->set_number('171');
$phone_number->set_type(Person_PhoneType::MOBILE);
// serialize
$string = $book->SerializeToString();
// write it to disk
file_put_contents('adressbook.pb', $string);
// 反序列化操作:
$string = file_get_contents('./test.pb');
// Just read it
$book = new AddressBook();
$book->parseFromString($string);
var_dump($book->person_size());
$person = $book->person(0);
var_dump($person->name());
var_dump($person->surname());
var_dump($person->phone(0)->number());
var_dump($person->phone(0)->type());
var_dump($person->phone(1)->number());
var_dump($person->phone(1)->type());
本站原创文章,转载请注明出处。