如何在thrift中使用异步模式?

时间:2016-07-30 12:35:00

标签: thrift

我知道oneway方法是使用异步模式,但这还够吗? 我是否需要使用TNonblockingSocket(而不是TSocket)? 我是否需要将服务器定义为TNonblockingServer?

1 个答案:

答案 0 :(得分:0)

首先,oneway关键字用于将Thrift服务方法标记为“一劳永逸”。

幕后发生的事情是Thrift编译器只生成用于发送输入数据的代码。 oneway来电完全省略了客户端代码的接收部分。换句话说,客户端只是发送请求,然后继续前进而不等待任何响应(请注意,这也包括例外)。

这些调用是否oneway在第一次运行时在服务器端没有区别。它主要影响客户端,因为一旦请求成功发送,客户端就不需要再等待oneway调用返回。

服务器端如何处理该请求完全取决于服务器。它可以是TSimpleServer,一次只处理一个呼叫。或者它可以是某些其他服务器类型,如TNonblockingServerTThreadPoolServer,能够以并行(或半并行)方式处理多个请求。但这与任何非oneway电话没有多大区别。唯一真正的区别是没有回复发送回客户端

......但当然有一个警告。

如果服务器无法提供所需的吞吐量,则当下一个请求到达时,它可能仍在处理上一个请求。 此时客户端可能会阻止,直到可以发送下一个请求

底线

如果您的代码具有一定的复杂性且服务器面临频繁的请求,则必须增强服务器以保证您期望的吞吐量。 Little's law将此形式化,并将其置于一个很好的公式中。