-
Notifications
You must be signed in to change notification settings - Fork 386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SRPC支持自定义拦截器吗 #395
Comments
http请求和SRPC项目没有关系吧? 你的需求可以描述得更加详细吗。 |
构建SRPCServer或者HttpServer时,收到请求类似filter机制 拦截/业务解密等操作后,在经过Echo接口回调上来,SRPC有类似的功能吗 |
你需要依据什么过滤呢?IP地址,还是消息内容?需求越具体越好。 |
以rutorial-17为例,srpc::HttpServer收到请求时,可能会根据数据报文、head信息做token认证,有没有一种机制类似java aop自定义切面机制,可以在回调process前通过回调完成认证流程,然后process中收到的都是认证通过的数据,将两块逻辑隔离 |
@Chenzqk hi,是支持的,filter就是做这类功能,使用AOP的模式做请求的过滤。
|
看目前http_server.cc中,只支持RPCModuleTypeTrace和RPCModuleTypeMetrics的filter设置,是只需要自定义RPCModule类型,修改add_filter,然后派生RPCFilter就可以了吗 |
是的,需要增加一个RPCModule,这个你可以模仿https://github.com/sogou/srpc/blob/master/src/http/http_module.h 加一个,也可以我加,毕竟module比较通用。 一个module代表一种处理切面,而filter代表多种具体做法。以metrics为例子就是采集起始信息,而filter可能可以上报prometheus或者OpenTelemetry,当前这个需求可能filter就是不同的认证方式。 |
好的,感谢!我这尝试一下看看 |
@Chenzqk 感谢!感觉你也做过类似的模块,这个需求确实你可以写写看,module是通用的,如果可以的话也欢迎提PR到srpc项目中! 另外又看了下,module如果没有特殊用途,也许用RPCModuleTypeEmpty就可以了。如果module有其他功能,需要被其他filter使用,就需要在框架代码:https://github.com/sogou/srpc/blob/master/src/rpc_basic.h#L140 加一个type,类似于这种: enum RPCModuleType
{
RPCModuleTypeEmpty = 0,
RPCModuleTypeTrace = 1,
RPCModuleTypeMetrics = 2,
RPCModuleTypeLog = 3,
RPCModuleTypeAuth = 4, // 之类的
}; |
要不咱们把4定义成Custom算了。 |
@Chenzqk hi,上述的type已经改了,并且filter的返回值已经可以用来控制处理流程。 |
SRPC支持自定义拦截器吗,比如http请求和回复时先经过过滤器转换后发送
The text was updated successfully, but these errors were encountered: