在 http://developers.facebook.com/thrift/thrift-20070401.pdf 7.1节有如下内容,
Thrift services implemented in PHP have also been embedded into the Apache web server, provid- ing transparent backend access to many of our frontend constructs using a THttpClient implementation of the TTransport inter- face.
但Thrift没有把service嵌入到Servlet中的实现。搜索了以下,有人解决了这个问题。
参见: http://www.google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#vusEaWnOsAk/thrift/TServlet.java&q=TServlet
我只做了一点修改,其中把com.facebook.thrift改为org.apache.thrift。测试了一下,可以正常运行。
修改后的TServlet.java
写一个实现自己service的servlet
UserServiceServlet.java
修改web.xml
加入如下内容
启动tomcat
Java客户端测试
把client.java中的
TTransport transport = new TSocket("localhost", 9090);
改为
transport = THttpClient.THttpClient("http://localhost:8080/UserService")
Python客户端测试
把client.py中的
transport = TSocket.TSocket('localhost', 9090)
改为
transport = THttpClient.THttpClient("http://localhost:8080/UserService")
最后,尽管http的方式是可以工作的,这样说明了Thrift的传输协议是很容易改变的。但我想需要注意的是服务的并发能力受到了tomcat的限制。如果要追求并发能力,就要使用nonblock的传输方式。