Ahm*_*hal 4 scala thrift finagle scrooge
我想在Scala中编写一个thrift服务实现(使用Scrooge)但不使用Finagle,因为我无法为Finagle服务器编写ruby/python客户端.问题是,使用scrooge服务似乎没有实现"处理器"类.
假设我有这样的节俭定义:
service TestService {
void testFunction(1: string message);
}
Run Code Online (Sandbox Code Playgroud)
我使用scrooge生成scala文件,当我尝试使用thrift的标准实现来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()
Run Code Online (Sandbox Code Playgroud)
生成的TestService对象似乎没有Processor内部类.不知道如何在没有Finagle的情况下做到这一点?或者作为另一种解决方案,如何将一个python或ruby客户端写入finagle thrift服务器?
小智 6
您必须使用Scrooge的finagle thrift实现.请注意,它与所有wire和IDL兼容,因此您可以使用您想要的任何实现,因为您共享IDL.
您可以为finagle thrift服务编写Ruby或Python客户端:它说的是相同的协议.
小智 5
根据您链接的项目,您似乎在客户端和服务器之间存在传输不匹配.
你的python客户端正在使用缓冲传输:
transport = TTransport.TBufferedTransport(transport)
Run Code Online (Sandbox Code Playgroud)
但您的scala服务器正在使用框架传输:
.codec(ThriftServerFramedCodec())
Run Code Online (Sandbox Code Playgroud)
如果您更改python客户端以使用框架传输,您的问题应该消失:
transport = TTransport.TFramedTransport(transport)
Run Code Online (Sandbox Code Playgroud)