I want to write a thrift service implementation in Scala (using Scrooge) but without the use of Finagle, since I couldn't write a ruby/python client for Finagle servers. The problem is that with scrooge the service doesn't seem to implement "Processor" class.
Assume I have a thrift definition like this:
service TestService {
void testFunction(1: string message);
}
and I generated the scala files using scrooge, when I tried to use the standard implementation of thrift for scala with that to run the server:
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()
The generated TestService object doesn't seem to have the Processor inner class. Any idea how to do that without Finagle? or as another solution, how to write a python or ruby client to finagle thrift servers?
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)