1

我有一个 thrift 服务,它有两种方法
1. 响应 processSync(Request req) :此方法同步处理请求并返回响应。客户端线程被阻塞,直到服务器完全处理请求。
2. void processAsync(Request req) :该方法用于异步处理。在这里,只要服务器完全接收到请求,调用就会返回,没有输出。客户端线程不会等到服务器处理请求。

在使用 ThreadedSelectorServer 时,它具有用于读取/写入和处理线程的单独线程。要求是在方法级别使用单独的线程池。这是因为可能会发生所有处理线程都忙于同步请求的情况。使用异步 api 的客户端可能会超时。我希望给两个 api 同等的权重,这样如果服务器被同步请求淹没;异步请求不会受到影响。

想过有两种不同的服务,一种只有同步方法,另一种有异步。但在这种情况下,必须启动两个节俭服务器,这需要两个不同的端口。我希望避免这样做。

有什么建议可以实现吗?

4

1 回答 1

0

是的,使用Thrift 0.9.1 引入的多路复用协议 。它允许多个服务共享相同的传输。请注意,服务器和客户端都必须使用多路复用协议层才能成功。

顺便说一句,考虑将 async 方法设为 oneway

Service whatever {
  oneway void processAsync(1: Request req) 
}
于 2013-09-20T18:17:33.020 回答