据说google的protobuf效率很高,我们决定尝试一下,使用到php项目中,作为反序列化的协议,调用.net的soa接口。
由于protobuf的源码只有java、c++、Python,我选用了c++作为开发语言,进行PHP扩展的开发。
首先,注意到与用c做PHP扩展的几点不同,主要集中在config.m4中:
PHP_ARG_ENABLE(protophp, whether to enable protophp support,
[ --enable-protophp Enable protophp support])
if test "$PHP_PROTOPHP" != "no"; then
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY(stdc++, "", EXTRA_LDFLAGS)
PHP_ADD_LIBRARY(protobuf, "", EXTRA_LDFLAGS)
AC_DEFINE(HAVE_PROTOPHPLIB,1,[ ])
CPPFILE="protophp.cpp addressbook.pb.cpp"
PHP_NEW_EXTENSION(protophp, $CPPFILE, $ext_shared)
fi
其中PHP_REQUIRE_CXX()指明了使用c++作为开发语言,所以也就是用g++作为编译器。
PHP_ADD_LIBRARY将c++标准库和protobuf

本文介绍了如何在PHP中使用C++封装protobuf进行反序列化操作。通过创建PHP扩展,利用protobuf的C++库,实现了PHP调用.NET SOA接口的数据交换。在扩展开发过程中,详细讨论了配置、编译以及处理新增数据类的方法,同时也解决了PHP和protobuf宏冲突的问题。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



