我有一个Thrift服务器应用程序和另一个通过apache thrift与之通信的客户端应用程序。

3个问题:

1-在我的客户端应用中,创建节俭的客户端并打开传输进行通信时,通过保持传输打开状态,是否最好在整个应用程序生命周期中(即始终启用)重用同一客户端和传输作为单例?最好创建一个新的客户端,打开传输,然后在对旧服务器的每次调用时关闭它?

2-为什么?

3-就性能而言,它是否有任何改变(考虑通过同一客户端打开和关闭传输的开销以及数据吞吐量)?

最佳答案

'1&'2。带I / O堆栈(原型/传输)的单个Thrift客户端表示单个连接。建立和断开连接的费用相对较高,因此,如果您定期使用客户端,则保持连接通常是一个好主意。但是,客户端对象通常不是线程安全的,因此,如果您的应用程序是多线程的,则需要管理对客户端的访问,以便对RPC请求/响应操作进行序列化。

'3。如果您经常发出RPC请求,则打开和关闭连接会增加很多开销,因此通常最好保持连接打开。另一方面,如果您很少发出RPC请求,则在不使用它们时,保持连接打开会占用服务器上的资源,因此最好为每个稀疏请求打开和关闭。

我的建议是在每个独立线程中创建一个客户端,但真正的答案是对每种情况进行试验并评估结果,选择最快/最便宜的结果。

07-28 02:55
查看更多