Thrift上方的管理层

时间:2014-12-04 09:58:39

标签: filter thrift session-management

Thrift听起来很棒,但找不到我在RPC框架中习惯的一些基本内容(如HttpServlet)。我找不到的东西的例子:会话管理,过滤,上传/下载进度。

据我所知,缺少的东西可能是Thrift之上的管理层。如果是这样,这样一层的任何例子?也许是AOP(面向方面​​)?

我无法想象这样一个层可以编译成所有语言而且我错过了。以会话管理为例,可能有几个客户端都需要进行一些身份验证并在每个RPC上传递session_id。我希望所有语言都能使用类似的API。

任何人都知道Thrift的管理层?

1 个答案:

答案 0 :(得分:1)

所以节俭本身不会在这里帮助你。 我有类似的愿望,并提出一些建议:

1。将管理对象放入IDL

只需将api令牌或公共传输数据结构作为参数添加到所有服务方法中。将其设置为参数ID 15,以便它始终是最后一个参数,即使您在中间添加其他参数也是如此。

作为处理程序的第一步,您可以使用额外数据验证/存储/执行任何操作。

这样做的好处是它可以在thrift支持的任何平台上有效。

2。使用thrift over http

如果您使用http作为传输,您可以根据需要包含任何数据作为http标头,并将节俭内容作为正文包含。

这通常需要为您注入数据的每个平台使用自定义http客户端,并在服务器上使用自定义处理程序来使用数据,但这些都不是非常困难。

3。破解协议

可以创建自己的自定义协议,包装另一个协议并注入自定义数据。看看多路复用协议如何在大多数语言的thrift库中工作: c# here.它将方法名称作为service:method发送到网上。多路复用处理器解包此编码并将其传递给适当的处理器。

我使用了一种类似的方法来编码方法名称中的任意键/值对(如http头)。

这样做的缺点是您需要为将要使用的每个平台编写更复杂的扩展。一旦。它在语言与语言之间的差异有多大,但是一旦你弄清楚它就足够简单了。


这些只是我的一些想法,我相信还有其他一些想法。关于节俭的好处是各个组件如何彼此分离。如果您有特殊需求,可以根据需要更换任何特定功能。