4

我想在 Scala 中编写一个节俭服务实现(使用 Scrooge),但不使用 Finagle,因为我无法为 Finagle 服务器编写一个 ruby​​/python 客户端。问题是使用 scrooge 服务似乎没有实现“处理器”类。

假设我有一个这样的节俭定义:

service TestService {
   void testFunction(1: string message);
}

当我尝试使用 thrift for scala 的标准实现来运行服务器时,我使用 scrooge 生成了 scala 文件:

val st = new TServerSocket(9999)
val processor = new TestService.Processor(new TestServiceImpl)
val arg = new TThreadPoolServer.Args(st)
arg.processor(processor) 
val server = new TThreadPoolServer(arg)
server.serve()

生成的 TestService 对象似乎没有 Processor 内部类。知道如何在没有 Finagle 的情况下做到这一点吗?或者作为另一种解决方案,如何编写一个 python 或 ruby​​ 客户端来finagle thrift 服务器?

4

3 回答 3

6

您必须将 finagle thrift 实现与 Scrooge 一起使用。请注意,它是所有有线和 IDL 兼容的,因此您可以使用任何您想要的实现,只要您共享 IDL。

您可以为 finagle thrift 服务编写 Ruby 或 Python 客户端:它使用相同的协议。

于 2012-07-18T21:29:19.120 回答
5

根据您链接到的项目,您似乎在客户端和服务器之间存在传输不匹配。

您的 python 客户端正在使用缓冲传输:

transport = TTransport.TBufferedTransport(transport)

但是您的 scala 服务器正在使用框架传输:

.codec(ThriftServerFramedCodec())

如果您将 python 客户端更改为使用框架传输,您的问题应该会消失:

transport = TTransport.TFramedTransport(transport)
于 2012-07-19T13:38:51.520 回答
2

我的问题已经通过在 python 和 scala 中使用相同的传输来解决。

在我的 python 客户端中。

transport = TTransport.TFramedTransport(transport)

您可以找到示例工作链接

于 2012-07-19T13:38:53.003 回答