« �����ʼ� (3) | ������ҳ | �������� »

Protocol Buffers for C

��һֱ��̫���� google protocol buffers ��Ĭ����ơ�Ϊÿ�� message type ����һ���� C++ �������Һ����ܡ����ҹٷ�û���ṩ C �汾���������� C �汾 Ҳ���������⡣

������ƺ�����������̬���Ե� binding �����������̬����������û��ǿ���ͼ�飬�������ɴ���ķ�ʽ��û���ر�ĺô��������кܴ��������ʧ����ͨ����һ�� bingding ��ķ�ʽ�Ƚϣ�������ٷ��� Python �⣬��ȫ����������ʱ������Э�飬����Щ�������ɳ����������������ߵĹ������ɴ��롣

ȥ���ʱ��������д��һ�� lua �汾�Ŀ� ��Ϊ�˶����ڹٷ��汾������������ lpeg д��һ�� .proto �ļ��Ľ����������˴�Լ���� 100 �� lua ����Ϳ��Խ����� .proto �ļ��ڵ�Э�����ݡ������� lua ��ֱ�Ӽ����ı���Э�������ļ��������������ΰ����Ҵ�æ��

��Σ�����������Ŀ�������� protobuf Э��������⣬���ͷ�úý��һ�¡��ϸ���һ��ʼ�������� luajit �úñ�дһ���� lua �档���룬���� luajit �� ffi ���Դﵽ���������ܡ����������Ժ󣬷��ֺ� C++ �汾��Ȼ�в�� (��Լֻ�ܴﵽ C++ �汾�� 25% ~ 33% ���ҵ��ٶ�) ������ȥ��д�� C + Lua binding �ķ�ʽҪ����ǣ�ȥ��д����һ�� C ����� Lua ������̫�ࡣ����������������дһ�� C ʵ�ֵ��뷨��

����һ���ʱ��������ָ�����и� googler ���Ҳ�������ƵĹ�������pb �����Ŀ������ ��������д��һ��ƪ��������Ϊʲô������һ�ݶ����������Ϻ��ҵij���һ�¡��������� api ��ƵIJ�̫�ã��Ҿ���̫���á����������Ŀ����������������Լ�����һ�ݡ�


C �汾֮���Ժ��Ѱ� api ��ƺã�����Ϊ C ȱ����Ҫ�����ݽṹ������û���������գ�ȱ���������͵�Ԫ��Ϣ��

�����������Ҿ����ṩ���� api �����㲻ͬ������

������Ҫ��̫�ߵ�ʱ�򣬽������� C ���Կ����ı����Ҫ���ṩһ�׼����õ� api ���� protobuf ��ʽ�� message ���ҳ�֮Ϊ message api ��

������������ api :

���ڱ��� protobuf ����Ϣ��ʹ�� rmessage ��� api

struct pbc_rmessage * pbc_rmessage_new(struct pbc_env * env, const char * typename , struct pbc_slice * slice);
void pbc_rmessage_delete(struct pbc_rmessage *);

uint32_t pbc_rmessage_integer(struct pbc_rmessage * , const char *key , int index, uint32_t *hi);
double pbc_rmessage_real(struct pbc_rmessage * , const char *key , int index);
const char * pbc_rmessage_string(struct pbc_rmessage * , const char *key , int index, int *sz);
struct pbc_rmessage * pbc_rmessage_message(struct pbc_rmessage *, const char *key, int index);
int pbc_rmessage_size(struct pbc_rmessage *, const char *key);

���ڽ�����Ϣ��ʹ�� wmessage ��� api

struct pbc_wmessage * pbc_wmessage_new(struct pbc_env * env, const char *typename);
void pbc_wmessage_delete(struct pbc_wmessage *);

void pbc_wmessage_integer(struct pbc_wmessage *, const char *key, uint32_t low, uint32_t hi);
void pbc_wmessage_real(struct pbc_wmessage *, const char *key, double v);
void pbc_wmessage_string(struct pbc_wmessage *, const char *key, const char * v, int len);
struct pbc_wmessage * pbc_wmessage_message(struct pbc_wmessage *, const char *key);
void * pbc_wmessage_buffer(struct pbc_wmessage *, struct pbc_slice * slice);

pbc_rmessage_new �� pbc_rmessage_delete ����������ͷ� pbc_rmessage �ṹ���ӽṹ��ȡ��������Ϣ���ַ�����������������֤�����ڵġ���������Ҫ�û������ڷ��ӵĶ��󹹽������ٹ�����

���� repeated �����ݣ�û�ж����������µ��������͡����ǰ� message �ڲ�����������Ϊ repeated ��������ƣ����Լ���ľ�����Ҫ�� api ��

������ pbc_rmessage_size ���Բ�ѯ message ��ij�� field ���ظ��˶��ٴΡ������Ϣ�в�û�б�������� field �����ܷ��� 0 ��֪����

�Ұ����еĻ�����������ȫ��ͳһ�������֣�integer , string , real ��bool ���ͱ����� integer ������enum ���ͼ������� string ��Ҳ������ integer ���� pbc_rmessage_string ʱ������ȡ�� enum �����֣��� pbc_rmessage_integer ��ȡ�� id ��

pbc_rmessage_message ���Ի��һ������Ϣ��������صĶ��󲻱���ʽ�����٣����������ڹҽ��ڸ��ڵ��ϡ���ʹ��Ϣ��û�б�����ij������Ϣ����� api ��Ȼ������ȷ�ķ��ء�����ȡ�������򶼽���Ĭ��ֵ��

integer ������ 32bit ���� 64bit ���������ܿ϶�����Ҫ������������ 32bit ����ʱ��pbc_rmessage_integer �����һ���������Դ� NULL �����Ը� 32bit �����ݡ�

wmessage ���÷������Dz��ϵ���һ��δ�رյ���Ϣ����ѹ���ݡ������������Ϣ�����ݶ�����󣬿����� pbc_wmessage_buffer ����һ�� slice ����� slice ������� buffer ��ָ��ͳ��ȡ�

��Ҫע����ǣ����ʹ�� pbc_wmessage_integer ѹ��һ��������һ��Ҫ����λ�� -1 ����Ϊ�ӿ�һ�ɰѴ�������������޷��ŵ�������

���ǵ�ijЩ�ڲ�ʵ�ֵ����ܣ��Լ����潲�ᵽ�� pattern api �ķ����ԣ��������ȫ��������� C/S ͨѶ�����������е� string ����ĩβ���� \0 ����Ϊ�������ڽ����ʱ�򣬿��Խ��ַ���ָ��ֱ��ָ�����ݰ��ڣ�������Ҫ���⸴��һ�ݳ�����

pbc_wmessage_string ����ѹ��� \0 ��β���ַ�������Ϊѹ������ݳ������ɲ����ƶ��ġ���Ȼ��Ҳ���Բ��Լ����㳤�ȡ�������Ȳ����� <=0 �Ļ������������ strlen ��⡣���ҽ����յij��ȼ�ȥ�����������������㴫 -1 ���ͻ�����ѹ������һ�� \0 �ֽڡ�


Pattern API ���Եõ����ߵ����ܡ�������ٶȺ͸��ٵ��ڴ�ռ����������Ҫ���ǣ����ڱȽ�С����Ϣ���������ʹ�õõ���ʹ�� pattern api �������ᴥ������һ�ζ��ϵ��ڴ���������api ����ʱ�����е���ʱ�ڴ涼��ջ�ϡ�

��� api ���£�

struct pbc_pattern * pbc_pattern_new(struct pbc_env * , const char * message, const char *format, ...);
void pbc_pattern_delete(struct pbc_pattern *);
int pbc_pattern_pack(struct pbc_pattern *, void *input, struct pbc_slice * s);
int pbc_pattern_unpack(struct pbc_pattern *, struct pbc_slice * s , void * output);

����������Ҫ����һ�� pattern ������ͽ����á�һ���򵥵������������ģ�

message Person {
  required string name = 1;
  required int32 id = 2; 
  optional string email = 3;
}

����һ����Ϣ�������� C �Ľṹ���У������ϣ���������� struct Person { pbcslice name; int32t id; pbc_slice email; } ����ʹ�� pbc_slice ����ʾһ�� string ����Ϊ���� message ��˵��������ַ������г��ȵġ����Ҳ�һ���� \0 ��β��slice ͬ�����Ա�ʾһ����δ�⿪������Ϣ��

����ʹ�� pbc_pattern_new ������ pbc ��ʶ����ṹ���ڴ沼�֡�

struct pbc_pattern * Person_p = pbc_pattern_new(env , "Person" ,
  "name %s id %d email %s",
  offsetof(struct Person , name),
  offsetof(struct Person , id),
  offsetof(struct Person , email));

Ȼ��Ϳ����� pbc_pattern_pack �� pbc_pattern_unpack ����ͽ����ˡ�pattern �Ķ�������߳��������׳�������Ҳ���Կ����û����������ǣ����������������ܼ������еij��ϣ���Щ��ֵ�õģ���������д��Щ��ֵ�ã����Կ����û������ message api ��

���� repeated �����ݣ�pattern api �����ǿ���һ������ pbc_array ��

������һ�� api ����������������

int pbc_array_size(pbc_array);
uint32_t pbc_array_integer(pbc_array array, int index, uint32_t *hi);
double pbc_array_real(pbc_array array, int index);
struct pbc_slice * pbc_array_slice(pbc_array array, int index);

void pbc_array_push_integer(pbc_array array, uint32_t low, uint32_t hi);
void pbc_array_push_slice(pbc_array array, struct pbc_slice *);
void pbc_array_push_real(pbc_array array, double v);

�����Ǹ���΢����һЩ�����ݽṹ�������������ݲ���Ļ�����Ҳ����ǣ�������ϵĶ����ڴ���䡣������Ȼ�п��ܵ�����Щ api ���ܶ�������ڴ棬��ô������ֹ������Щ�ڴ档�����ڵ�һ��ʹ��ǰ�������ʼ��������ݽṹ (memset Ϊ 0 �ǿ��Ե�)��

void pbc_pattern_set_default(struct pbc_pattern * , void *data);
void pbc_pattern_close_arrays(struct pbc_pattern *, void *data);

pbc_pattern_set_default ���԰�һ���ڴ棬��һ�� pattern ����ʽ����ʼ�����е��򡣰������е�����ij�ʼ����

pbc_pattern_close_arrays ʹ����һ�����ݣ���Ҫ�ֹ�������� api ���ر�������ݿ��е����顣


���� Extension ������������ֱ��֧�֡�û���ṩ���� get extension �� api ��������Ϊ�����ǿ��Ը��򵥵�ȥ���� extension ���Ұ����е� extension field ������ǰ׺�������Ҫ��������ƴ���ַ����ķ�ʽ�����Ϣ���ڵ���չ��


�����ܵ��� pbc �Ļ�����

struct pbc_env * pbc_new(void);
void pbc_delete(struct pbc_env *);
int pbc_register(struct pbc_env *, struct pbc_slice * slice);

pbc �ⱻ��Ƴ�û���κ�ȫ�ֱ��������������ڶ��̻߳����û�Ƚϰ�ȫ����Ȼ�Ⲣû�п����̰߳�ȫ���⣬���ڲ�ͬ���߳���ʹ�ò�ͬ�Ļ�������ȫû������ġ�

ÿ��������Ҫ����ע����Ҫ����Ϣ���ͣ�����һ�� protobuf ��ٷ��������ɵ� .pb ���ݿ鼴�ɡ��� slice ����ʽ���룬register �����������ڴ�����ͷš�

������ݿ���ʵ���� google.protobuf.FileDescriptorSet ����������ġ�����������ͷdz����ӣ�ʹ�� bootstrap ���̼�����д������ں����̸����


ȫ���������Ѿ���Դ���� github ���ˣ������� https://github.com/cloudwu/pbc ȡ�����롣��ϸ���÷�Ҳ���Դ���Щ test �ļ����ҵ����ӡ�

�����������д�����Դ�����ң���д��ƪ blog ��ʱ���һ�û�п�ʼ��������Ľṹ��������õĽ����ã����ƴ� bug �����������ǡ�

��һ�����ӵ� protobuf Э��������Э�鱾������ĺܵ��ۡ�������û���κ�һ�����õ�Э�������ǰ�������޷������κ� protobuf Э�顣����һ�����м��������е������⡣����˵���Һ���ƾ��д��һ�� pbc_register �� api ����Ϊ����Ҫ�� register һ�� google.protobuf.FileDescriptorSet ���Ͳ��ܿ�ʼ��������İ���

�������Ȿ��ȥ���� google.protobuf.FileDescriptorSet �����Ķ����Ƿdz��鷳�ġ���Ȼ�ҿ������� google �ٷ��Ĺ������� google.protobuf.FileDescriptorSet �� C++ �����࿪ʼ����������ƫƫ�ֲ�ϣ��������������������������

һ��ʼ��ϣ���Զ���һ�ָ��򵥵ĸ�ʽ������Э�鱾����û�й���IJ�νṹ��ֻ��һ��ƽ̹�����顣�����ֹ��������п��ܡ���������� protoc дһ�� plugin �������Զ����Э���ʽ�����������������������Ϊϣ��������������һЩ��

��������������Dz���ʹ���ˡ������Դ������ bootstrap.c ���ֵ�Ե�ɡ�������һ�����򵥰汾�� google.protobuf.FileDescriptorSet ������������������������ɺõģ����� descriptor.pbc.h ������������ʹ������ȥ����ɵ� lua �⡣��ص� lua �����û�зų����ˡ���Ȼ���˽��죬pbc �����㹻���ƣ����ǿ����� pbc дһ�� C �汾������Ȥ��ͬѧ�������� test_pbc.c �Ļ������޸ġ�


����������д, ��Ҫ���Ǹ�������,������������,��������ʵ�ֹ��̵ĺܳ�ʱ����,�����ﶼ�ݺ�һ��. ���Ժܶ����ʵ�ֵĺ����, ���ֲ����ɾ(��Ϊ��Ϊ�Ұ�����д������, ��д���ѵ���). ϣ��һ��дһ���Ż��Ļ�ϰ��, �ڶ������ֱȽ���ʵ�ֵĶ�����, ���ұ�д�ĺ���ʹ��. Ϊ��Ч��, ������д��������Բ�ͬ��������� map .

�м���Ϊ�뷨�ı�, api ��Ƹı�,�����˺ü�ǧ�д���. ����Ҳ�������������. �п���������һ��.

����, ��������ϸ�ڿ��Խ�һ���Ż�, �������ֻ���Сͷ�Ļ�����, ���಻��Ҫ�Ĵ��붼����ʡ�Ե�. ���� packed ����Ҳֵ�ý�һ���Ż�. �������Կ��Ǽ�һ�� JIT .

���������һ�����ˡ�����д�� 5000 �д��룬����Ҫ��Ϣһ�¡�

Comments

��������2000�д���ʵ�ֵ�protobuff,����Ҫ.proto�ļ�������Ҫ.lib�ļ������ܱ�google��ʵ�ֿ�һ���� http://my.oschina.net/u/2504104/blog/524370
pbc ��� lua binding,����ҵ�������required�������ҵ�int���;Ͳ���Ϊ0��string���͵IJ���Ϊ"",����lua��˵��nil���ǿ�ֵ������Щ���������0��""Ӧ��Ҳ��������������ֵ�����ݣ����ʣ���������Ͽ��Խ����
Ϊʲô��repeated pack �� message�ı������ݲ���tag˳������أ������Ǻ͹ٷ�Э�鲻�����ˣ�
�������Ĵ�����Ը�C++���protocbuf�໥ͨѶ��
.proto �ļ�ʹ���� enum �ᵼ�� register fail ȥ��enum ��û��������
.proto �ļ�ʹ���� enum �ᵼ�� register fail ȥ��enum ��û��������
���Ǵ�����д���˿���?������Ϲ�ѧû?��C������ʦ�������˽�����ôд����?����JB�����. �����������ų����Ǵ��� ��˵���˵Ŀ�Դ��Ŀ��ô����ô��
ʹ������pbc���ҵ�b.proto����һ�У� import "MessageType.proto"; ����register��MessageType.proto�ļ�������ע��b.proto�ļ�ʱ������import "MessageType.proto";���б����ˣ�������զ��
�������д��p2p�ij���׼������google protocol buffers��װ��Ϣ�������ṩ��api���಻�࣬ϣ��google protocol buffersʹ�õ��˸��࣬�о����ͦ�õġ�
����һ�� protobuf ��ٷ��������ɵ� .pb ���ݿ鼴�� O��Ӧ����protoc -o ������Ǹ��ļ��ɣ�
����һ�� protobuf ��ٷ��������ɵ� .pb ���ݿ鼴�� ����һ�£�����������ĸ������ҵ�����.pb.cc,.pb.h �ļ��Ĺ��ߣ�û�ҵ����ɵ� .pb ���ݿ�Ĺ��ߡ����˿��Ը������ӣ�
@��� VS �İ汾, char temp[len] ���Կ����� alloca ������ malloc ���.
@��� лл, ���Ѿ��ӵ� readme ��.
VS2012����ֲ�棺 https://github.com/miaodadao/pbc
�����Ʒ�,�������Ͻ��յ�һ��protobuf data,��ô��������Ӧ��message��?������protobuf dataǰ�����message type��Ϣ��,����û�и��õĽ��������?
����Ϊ�� type (ͨ����Ҫ�ӳ���) ��� ��������Կ��Ǵ����ΰ�, �� type �� pb Э���ٰ�һ��. ������ extend .
�����Ʒ�,�������Ͻ��յ�һ��protobuf data,��ô��������Ӧ��message��?������protobuf dataǰ�����message type��Ϣ��,����û�и��õĽ��������?
��c�� ��fopen��ȡ�ļ����ظ�lua�� ��ô�� register(buffer) ʧ���� ��register fail��
лл�Ʒ�ķ������Ҹ���Ҳ�dz���ϲ��protobuf-c, �������õ���Ľ�����dz���л��
��vc���벻������ ʹ�õı�׼vc��֧��
���ʴ�����.pb���ļ���ָʲô?�Ǹ�.protoһ����ô��
�Ʒ��磬����ʹ��testparserʱ������parser�ļ�388��λ�ó�����������vc�����pdb���޸��˲��ٵĵط������ʸ����ȥ����������⣿���⻹��û�б�İ취����pb�ļ��ˣ�
лл¥��������֧��һ�£�
лл����������֧����
лл����
Optional Fields And Default Values As mentioned above, elements in a message description can be labeled optional. A well-formed message may or may not contain an optional element. When a message is parsed, if it does not contain an optional element, the corresponding field in the parsed object is set to the default value for that field. The default value can be specified as part of the message description. For example, let's say you want to provide a default value of 10 for a SearchRequest's result_per_page value. optional int32 result_per_page = 3 [default = 10]; If the default value is not specified for an optional element, a type-specific default value is used instead: for strings, the default value is the empty string. For bools, the default value is false. For numeric types, the default value is zero. For enums, the default value is the first value listed in the enum's type definition. �� default ֵû�и�����ʱ��, ��������, Ĭ�� default ֵΪ��. ���ǹٷ��Ķ���. http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/proto.html
������ʹ��pbc��pattern��ʽpack��ʱ����һ�����⣬��Ȼ��û�����ԭ�򡣶���һ��optional��int32�ֶΣ�������丳ֵΪ0������pack�����ʱ����Щ�ֶν�������������Ϊ��google�Ĺٷ�ʵ�ֲ�һ�¡�
����˵�ĺ������
�Dz��Ǵ�ţд�����Ķ���������������һ���� û�п����ĵ�˵����ô��ʹ��protobuf��Ϣ�����ļ����ҳ���ȥ���Դ�����������ôʹ����Ϣ�ļ��ģ�����ŷ���ԭ��Makefile������ô���桪����������Щ��Makefileר����ȫ�����������߼���
��ϸ����һ�²������¾��÷dz�ֵ��ѧϰ��
@tearshark protobuf ֧�ֵ����ͱ����г�����Ҫȫ��Ķ�, Ҳ����ʡ.
����Ϊ��֧�ָ�����ʽ���ַ���.д��������Ĵ���,һֱ����������е���� template> struct TypeConvert{enum{Type=XV_WString};typedef VStringW Convert;}; template> struct TypeConvert{enum{Type=XV_WString};typedef VStringW Convert;}; template> struct TypeConvert{enum{Type=XV_WString};typedef VStringW Convert;}; template> struct TypeConvert{enum{Type=XV_WString};typedef VStringW Convert;}; template struct TypeConvert{enum{Type=XV_WString};typedef VStringW Convert;}; template struct TypeConvert{enum{Type=XV_WString};typedef VStringW Convert;};
�ʵ���ʹ��C++,���DZ�C�򵥵�.�¾����߼���. ����,����ʵ���� operator ,_Ty); �������ʵ���� struct XbcValue { VALUA_TYPE type; union { char buffer[8]; struct { int32 length; void * data; }; }; }; ��XbcValue�Ķ�д���� template struct TypeConvert{enum{Type=XV_Binary}; typedef _Ty Convert;}; template> struct TypeConvert{enum{Type=XV_Char};typedef bool Convert;}; ��XbcValueΪ��������ɭ��״������֯.����Ϊ�־û����˺ܶ๤��,����֧�ֶ�д���ݵĺ����Ľ���
����: һ:�һ���ϲ���������ݵ��ֽ���ϸ����������,�������Ծ����Ľ�ʡ���ݴ�С,�ر������紫���ʱ�� ��:��������һЩ�ṹ���֧��,����3Dʸ��,4x4����ȵ�.���ṩ�Ļ�,�е�ʱ����ĺ�����.��������һ����˵,�ű��Dz�����ʵ�.Ϊ�˲����⸽��̫�ණ��,ֻ��������ȫ/������Ϣ.�Ͼ�,��������ֻ�ܴ�POD����������,���,�������ر�������.����,�ҹ���ΪBinary����,��ֻ��¼�����ֽ���������.��ȡ��ʱ���У���ֽ���.����ʽ��̹�����Ҳ����,�Ͼ�,����Ա��������д��û�д���Ĵ����,��ֻ��Ҫ����������ʱ��,��ʱ���Ѿͺ�. ��������: enum VALUA_TYPE { XV_Char, XV_Short, XV_Int, XV_Long, XV_Float, XV_Double, XV_String, XV_WString, XV_Binary, //����ʶ�Ľṹ������������ }; VALUA_TYPE type; union { char buffer[8]; struct { int32 length; void * data; }; };
�����Ĵ�����ѧ���ܶ࣬лл��
���˲��������¾��÷dz�ֵ��ѧϰ��֧��һ�£�
���ᵽ����luajit+ffiʵ�ֵĴ�lua��pbc�������й�������ô���Ƿ��з������е�����ƿ�������
��json-c�Ŀ��Žӿڵļ�࣬ͬʱ�־߱�protobuf��sdl��Խ�ԡ����ȷʵ����ģ� �������Ҫ��Ӧ���ڷ������˵Ļ���ȷʵ�������ͻ��˵Ļ��Ͳ���˵�ˣ�������������code generation��������������н������ݣ��ǾͲ��ñ���.pb�ļ������һ�𷢲���Ҫ����Щ.pb���ڿͻ��˵Ļ���ȷʵ���кܴ�İ�ȫ������protobuf-c���ṩ�Ľӿ�̫���ڳ�ª�ˣ����һ��Э��������ֶ��repeated�ֶΣ��Ƕ����Э�������˵�������ج�Σ����Ҷ����ڴ淽������Ҳ�����������ȫ�׸���ʵ���ߡ����˾������߲�û������ȥʵ������ �ص�.pb�ļ��������ϣ���û��һ�ַ�������protoc���ɾ�����Դ���룬�ڷ���������ݵĽӿ�ȴ������Ƶ�������˼�ࣿ�ҵ���Ҫ������������Э������ӣ���ȻҪ�Բ�ͬ��Э�����ɲ�ͬ��.pbЭ�������������ȫ�������ô��ļ��ķ�ʽ���м��صĻ������ƶ��豸��˵���ܻ���һ����Ч�����⣬����.pb���ų���һ�𷢲���ȷʵ����ȫ��
л����������֧��һ�£�
>>�������Ȿ��ȥ���� google.protobuf.FileDescriptorSet �����Ķ����Ƿdz��鷳�ġ� google.protobuf.FileDescriptorSet �� protobuf ����������Ϊ C++ ��� metadata ������ͬ����˼·��ʵ�ֹ�һ������ c struct �����ƵĿ⣬������һ���Զ���� metadata ������ʽ�� http://code.google.com/p/spdatapickle/source/browse/trunk/spdatapickle/spdpmetainfo.hpp �ļ����������� metadata �Ļ���ģ�͡�
��û�� pb �� spec �����İ棿 ż�Ƕ���֪������ô�õ�
�ײ�����ɾ��дд��ɾ��~
����BinSpec������Լ���������������������ʲô�����붼����:-) https://github.com/bg5sbk/BinSpec
������Щ������������û�п���
��Ϊ���Լ��ķֲ�ʽ�洢��Ŀ��������һ��protocol buffer��cʵ�֣��Ѿ���������github�ϡ� libpc: https://github.com/wangeguo/libpb
������ˣ�����ѧϰ
"�������� C �汾 Ҳ����������" protocol-c ����Ҳ������C�����⣬����ʲô���㲻������أ����
���pbc�᲻���õ���Ϸ�ͻ��˺ͷ�����֮��Ľ�����? ����õĻ�,�����ֶ�������Ϣ�DZ����,����ҵĺ����׾ʹӿͻ������ҵ�����Э��ĸ�ʽ������,�Ӷ�ʹ�����ѻ���ҵ��ż���󽵵�. �Ʒ���û�п������������.
�Ҿ������������û��˼������ƿ���ѵ������ԣ�
����� Ϊʲô˵: "�������ɴ���ķ�ʽ��û���ر�ĺô��������кܴ��������ʧ����ͨ����һ�� bingding ��ķ�ʽ�Ƚϣ�" �����ʵ��������Ϊʲô��̬���Ա�C��������
��������Ϸ������Ա��
����� Ϊʲô˵: "�������ɴ���ķ�ʽ��û���ر�ĺô��������кܴ��������ʧ����ͨ����һ�� bingding ��ķ�ʽ�Ƚϣ�"
������ϧ�������Go��Ȥ���󣬷���Go�DZ����������ôȱ�����������ٶȣ��ø㶨���ٰ���ʵ����̫��ϧ��
@mos, messagePack �е���˼, �����Ҳ���ʹ����. ��Ϊ�ڴ�֮ǰ, �����ʵ�ֹ��ܶ�汾�����ƵĶ���.���� pb ���Բ��������ܸ�, �������ݽ���. �����������û��ʹ�� pb, Ҳһ����һ���Զ���ĸ�ʽ, �϶������ messagePack ���ܲ���. ȥ����д��һƪ blog ̸��,�ҿ��� pb �����������걸�� DSL ���. ������������, ��ʵ����ν������ô�����, ���������ҿ��԰����������ʽ�޸ĵ�, �Եõ����ߵ�Ч��. �����Ҳ���Ҫ�� google �ķ����� gpb ��Э��ͨѶ����?
��ҹ�������Ϸ֮�ã��յ����ĵ����£�����ɳ��... ӡ�����ϴ��ᵽ�ĵĴ�������600�࣬һ��ʱ���쭵�5000�ˣ������
��û�п��ǹ�messagePack http://msgpack.org/

Post a comment

�����������ص������뵽�����Ա�