ZhangDi

Results 8 issues of ZhangDi

# 背景 当前一些依赖sofa-pbrpc的应用程序同时也依赖了boost,rpc依赖的boots如果和应用程序依赖的boost没有版本打平会造成一些不可预期的结果,之前出现过此类问题,而且问题追查也十分困难。 # 方案 从boost中抠出一个rpc依赖的最小子集放在src下的单独目录,之后的rpc不再依赖外部的boost库。 # 排期 11.7 -11.11: 完成开发自测,提交pr; 11.11-11.18: pr完善和修改,合入;

sofa-pbrpc php 扩展设计方案见 [https://github.com/baidu/sofa-pbrpc/issues/65]

实现方案 1. 在src/sofa/pbrpc/分别增加proto2 proto3的目录,存放不同版本的pb对应的sofa-pbrpc内置proto。 2. 在depends.mk中通过参数PROTO_VERSION控制编译pb的版本,代码中通过SOFA_PBRPC_USE_PROTO3的宏进行条件编译。默认采用pb2的版本编译pb,当编译时指定PROTO_VERSION=proto3,Makefile增加DSOFA_PBRPC_USE_PROTO3的选项,采用pb3的版本编译pb。 3. 在sample 和 test分别增加proto2 proto3目录,通过PROTO_VERSION控制编译pb的版本。用户在应用程序中,编译选项引入SOFA_PBRPC_USE_PROTO3使用pb3的版本。

# 背景 在rpc的应用场景中,用户需要传输非protobuf协议封装的数据,数据的格式和操作由用户定义,这些数据最终都以字节流的方式在client和server之间传输。需要在sofa-pbrpc内部实现一套attachment机制,支持用户自定义附加数据的格式和操作,用户在client端设置附加数据,server端接受并进行操作。基于该机制为用户提供默认的Cookie插件,用于存储和传输logid等client端的状态信息。 # 功能 实现sofa-pbrpc attachment机制,支持用户附加数据,附加数据的定义和操作在用户层实现。并基于此机制实现cookie插件 # 接口设计 - 在sofa-pbrpc中实现RpcAttachment的基类,包括Serialize和Deserialize的接口,用户层实现插件继承RpcAttachment并在此基础上实现增删改查的操作,用户在client中通过RpcController的set_request_attachment的接口设置附加数据,并调用Serialize接口将用户附加数据进行序列化,Append在request_buffer之后进行发送。 - 在RpcServer端对收到的请求数据反序列化,在请求数据的末尾获取用户的附加数据,通过controller传输给用户。用户调用RpcController:: GetRequestAttachment(RpcAttachment& attach), 利用attach对象的Deserialize接口将附加数据反序列化。Server端可以对attachment数据进行增删改查 Attachment基类: ``` c++ class RpcAttachment { public: virtual ~RpcAttachment() { } virtual bool Serialize(ReadBufferPtr...

# 功能 以php扩展的方式提供给用户,用户使用扩展库在php程序中向server发起RPC调用 # 接口设计 ## 用户接口 - PHP-Protobuf库选用[allegro/php-protobuf](https://github.com/allegro/php-protobuf),并修改其pb接口生成工具,增加与RPC相关的Service和Method接口,用户定义proto后通过工具protoc-php.php生成php-protobuf接口文件,该接口中调用sofa-pbrpc php扩展的功能函数,实现RPC调用。 - sofa-pbrpc php扩展为用户提供一个接口类PHPRpcServiceStub,工具生成的pb接口中rpc服务继承于该类,通过该类进行RPC调用,并获取调用的错误码以及错误提示。生成pb接口的Message部分与[allegro/php-protobuf](https://github.com/allegro/php-protobuf)保持一致,以EchoServiceStub为例,用户的proto文件中service定义如下: ``` php service EchoServiceStub { rpc Echo(EchoRequest) returns(EchoResponse); } ``` 生成Service/Method函数接口如下: ``` php class EchoServiceStub extends PHPRpcServiceStub...

BatchSendMessageResponse 异常会触发undefined variable的问题

同步MNS阿里云官网上php sdk的最新改动