使用守财奴和客户端在Python或Ruby写在斯卡拉旧货服务器(Write a thrift ser

2019-07-30 12:08发布

我想写(使用守财奴),但没有使用欺骗的Scala中的一个节俭服务实现,因为我无法写一个Ruby / Python客户端进行欺骗服务器。 问题是,与守财奴服务似乎并没有实现“处理器”类。

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

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

我使用的守财奴,当我试图用标准的实施节俭的斯卡拉与运行服务器产生的斯卡拉文件:

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的似乎不具有处理器内部类。 不知道如何做,没有欺骗? 或作为另一种解决方案,如何编写Python或Ruby客户端欺骗节俭服务器?

Answer 1:

Based on the project you linked to, it appears that you have a transport mismatch between client and server.

Your python client is using the buffered transport:

transport = TTransport.TBufferedTransport(transport)

But your scala server is using the framed transport:

.codec(ThriftServerFramedCodec())

If you change the python client to use the framed transport, your issue should go away:

transport = TTransport.TFramedTransport(transport)


Answer 2:

您必须使用与守财奴的欺骗节俭实施。 需要注意的是所有的电线和IDL兼容,所以你可以使用任何你想要实现的,因为你分享IDL。

你可以写Ruby或Python客户的欺骗节俭服务:它讲同一种协议。



Answer 3:

我的问题已经由Python和Scala的使用相同的传输解决。

在我的Python客户端。

transport = TTransport.TFramedTransport(transport)

你可以找到样本工作链接



文章来源: Write a thrift server in scala using scrooge and client in python or ruby