首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scala中使用scrooge编写thrift服务器,在python或ruby中编写客户端

在scala中使用scrooge编写thrift服务器,在python或ruby中编写客户端
EN

Stack Overflow用户
提问于 2012-07-19 04:12:17
回答 3查看 4.3K关注 0票数 4

我想用Scala (使用Scrooge)编写一个thrift服务实现,但不使用Finagle,因为我不能为Finagle服务器编写ruby/python客户端。问题是scrooge的服务似乎没有实现"Processor“类。

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

代码语言:javascript
复制
service TestService {
   void testFunction(1: string message);
}

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

代码语言:javascript
复制
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对象似乎没有处理器内部类。知道如何在没有Finagle的情况下做到这一点吗?或者作为另一种解决方案,如何编写python或ruby客户端来管理thrift服务器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-19 21:38:52

根据您linked到的项目,看起来客户端和服务器之间的传输不匹配。

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

代码语言:javascript
复制
transport = TTransport.TBufferedTransport(transport)

但是您的scala服务器使用的是帧传输:

代码语言:javascript
复制
.codec(ThriftServerFramedCodec())

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

代码语言:javascript
复制
transport = TTransport.TFramedTransport(transport)
票数 5
EN

Stack Overflow用户

发布于 2012-07-19 05:29:19

你必须在Scrooge中使用finagle thrift实现。请注意,它完全兼容wire和IDL,所以只要您共享IDL,就可以使用任何您想要的实现。

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

票数 6
EN

Stack Overflow用户

发布于 2012-07-19 21:38:53

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

在我的python客户端中。

代码语言:javascript
复制
transport = TTransport.TFramedTransport(transport)

您可以找到样例working link

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11549490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档