brpc icon indicating copy to clipboard operation
brpc copied to clipboard

Controller增加回调函数,用以支持在响应client之后,request/response析构之前执行一些自定义逻辑

Open guodongxiaren opened this issue 4 years ago • 9 comments

这个PR的目的是解决我之前提出的一个issue #1315 我们有一些场景,比如对response、request的整体(或其中大量字段)做落盘(比如经过某种序列化,然后把结果发送给kafka等MQ), 希望能在response返回给客户端之后,再做这个操作。避免占用请求响应的时间。然而之前的Done->Run()调用之后,request、response所指向对象都会被析构,则无法实现这个需求。故而我这次给brpc的Controller新增一个回调函数,可以由使用方注册一个回调逻辑,在response返回之后,但request、response析构之后来执行。

该功能目前在常用的 baidu_std/http/http2 协议上支持。其他协议未开发。

@zyearn 希望看看,如果有函数设计或命名有不妥之处欢迎提出。 另外我修改了example里面的三个server代码,来展示我新增的这个函数的用法,不知道是否允许。或者我应该写在某个文档里面,而不是直接改example?

guodongxiaren avatar Jun 14 '21 08:06 guodongxiaren

@jamesge

guodongxiaren avatar Jun 18 '21 04:06 guodongxiaren

https://github.com/apache/incubator-brpc/issues/1300 这个可以提供类似的功能,供参考,不过需要注意一下control,request, response的析构顺序

cdjingit avatar Jul 01 '21 02:07 cdjingit

#1300 这个可以提供类似的功能,供参考,不过需要注意一下control,request, response的析构顺序

不太一样吧。我这个偏业务,比如我是要根据业务场景的上下文状态,从request、response中一次性取出一些pb字段,组成一个json 或者新的pb,发给kafka。

@cdjingit

guodongxiaren avatar Jul 01 '21 14:07 guodongxiaren

这个PR的目的是解决我之前提出的一个issue #1315 我们有一些场景,比如对response、request的整体(或其中大量字段)做落盘(比如经过某种序列化,然后把结果发送给kafka等MQ), 希望能在response返回给客户端之后,再做这个操作。避免占用请求响应的时间。然而之前的Done->Run()调用之后,request、response所指向对象都会被析构,则无法实现这个需求。故而我这次给brpc的Controller新增一个回调函数,可以由使用方注册一个回调逻辑,在response返回之后,但request、response析构之后来执行。

该功能目前在常用的 baidu_std/http/http2 协议上支持。其他协议未开发。

@zyearn 希望看看,如果有函数设计或命名有不妥之处欢迎提出。 另外我修改了example里面的三个server代码,来展示我新增的这个函数的用法,不知道是否允许。或者我应该写在某个文档里面,而不是直接改example?

我遇到一个类似的问题,想使用这个功能。 目前有进展吗,看代码一直没有合入

foudreInSJTU avatar Nov 09 '21 08:11 foudreInSJTU

这个PR的目的是解决我之前提出的一个issue #1315 我们有一些场景,比如对response、request的整体(或其中大量字段)做落盘(比如经过某种序列化,然后把结果发送给kafka等MQ), 希望能在response返回给客户端之后,再做这个操作。避免占用请求响应的时间。然而之前的Done->Run()调用之后,request、response所指向对象都会被析构,则无法实现这个需求。故而我这次给brpc的Controller新增一个回调函数,可以由使用方注册一个回调逻辑,在response返回之后,但request、response析构之后来执行。

该功能目前在常用的 baidu_std/http/http2 协议上支持。其他协议未开发。

@zyearn 希望看看,如果有函数设计或命名有不妥之处欢迎提出。 另外我修改了example里面的三个server代码,来展示我新增的这个函数的用法,不知道是否允许。或者我应该写在某个文档里面,而不是直接改example?

我遇到一个类似的问题,想使用这个功能。 目前有进展吗,看代码一直没有合入

这个辛苦 @zyearn 有空看一下吧。有问题随时沟通

guodongxiaren avatar Nov 09 '21 09:11 guodongxiaren

我们有个场景也需要这个功能,这个PR还会往下推动吗?

xiweiw16 avatar May 07 '22 11:05 xiweiw16

@guodongxiaren Sorry 之前漏掉这条了。Sync一下重新提一下?

@wwbmmm 之前baidu内部有类似的需求吗

zyearn avatar Jun 09 '22 09:06 zyearn

@guodongxiaren Sorry 之前漏掉这条了。Sync一下重新提一下?

@wwbmmm 之前baidu内部有类似的需求吗

目前没有类似的需求

wwbmmm avatar Jun 09 '22 11:06 wwbmmm

@guodongxiaren Sorry 之前漏掉这条了。Sync一下重新提一下?

@wwbmmm 之前baidu内部有类似的需求吗

sync了。之前在微信群里讨论过这个需求场景,当时是其他committer建议给brpc加拦截器功能,来实现这种需求。后来没改。

guodongxiaren avatar Jun 19 '22 08:06 guodongxiaren