我知道oneway
方法是使用异步模式,但这还够吗?
我是否需要使用TNonblockingSocket(而不是TSocket)?
我是否需要将服务器定义为TNonblockingServer?
答案 0 :(得分:0)
首先,oneway
关键字用于将Thrift服务方法标记为“一劳永逸”。
幕后发生的事情是Thrift编译器只生成用于发送输入数据的代码。 oneway
来电完全省略了客户端代码的接收部分。换句话说,客户端只是发送请求,然后继续前进而不等待任何响应(请注意,这也包括例外)。
这些调用是否oneway
在第一次运行时在服务器端没有区别。它主要影响客户端,因为一旦请求成功发送,客户端就不需要再等待oneway
调用返回。
服务器端如何处理该请求完全取决于服务器。它可以是TSimpleServer
,一次只处理一个呼叫。或者它可以是某些其他服务器类型,如TNonblockingServer
或TThreadPoolServer
,能够以并行(或半并行)方式处理多个请求。但这与任何非oneway
电话没有多大区别。唯一真正的区别是没有回复发送回客户端。
......但当然有一个警告。
如果服务器无法提供所需的吞吐量,则当下一个请求到达时,它可能仍在处理上一个请求。 此时客户端可能会阻止,直到可以发送下一个请求。
如果您的代码具有一定的复杂性且服务器面临频繁的请求,则必须增强服务器以保证您期望的吞吐量。 Little's law将此形式化,并将其置于一个很好的公式中。