Open Chenzqk opened 4 months ago
http请求和SRPC项目没有关系吧?
你的需求可以描述得更加详细吗。
构建SRPCServer或者HttpServer时,收到请求类似filter机制 拦截/业务解密等操作后,在经过Echo接口回调上来,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, // 之类的
};
@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的返回值已经可以用来控制处理流程。 加了一个示例,如果有需要可以参考:https://github.com/sogou/srpc/blob/master/tutorial/tutorial-19-custom_filter.cc
SRPC支持自定义拦截器吗,比如http请求和回复时先经过过滤器转换后发送