thrift JAVA服务端 python客户端的实现
2012-11-29 13:07
615 查看
最近用python做网页的抓取,因为想得到JS解释后的HTML,先后尝试了selenium,windmill,htmlunit等web测试框架,因为只要得到html不需要界面展现,最后选择了htmlunit,而htmlunit只有JAVA的实现,所以考虑用RPC来进行python与JAVA的连接
最开始试用了一下ICE,JAVA端无问题,在用python做client的时候,发现ICE现在还不支持python2.7,放弃,再来看看thrift
下载地址http://thrift.apache.org/download/
先编写一个IDL接口定义
demo.thrift
再生成JAVA文件与python文件
接下来编译thrift的JAVA代码,解压thrift-0.9.0.tar.gz,在thrift-0.9.0\lib\java目录下用ant编译
编写JAVAServer
接口方法实现
JAVAClient实现
编写pythonClient
首先要安装一下thrift的python支持,在thrift-0.9.0\lib\py下执行python setup.py install,此处要注意的是如果在eclise下编写代码要在pvdev->interpreter-python->system pythonpath下加入C:\Python27\Lib\site-packages\thrift-0.9.0-py2.7.egg
pythonclient实现
最开始试用了一下ICE,JAVA端无问题,在用python做client的时候,发现ICE现在还不支持python2.7,放弃,再来看看thrift
下载地址http://thrift.apache.org/download/
先编写一个IDL接口定义
demo.thrift
namespace java service.demo service Hello { string helloString(1:string word) }
再生成JAVA文件与python文件
thrift --gen java demo.thrift thrift --gen py demo.thrift
接下来编译thrift的JAVA代码,解压thrift-0.9.0.tar.gz,在thrift-0.9.0\lib\java目录下用ant编译
编写JAVAServer
接口方法实现
package service.demo; import org.apache.thrift.TException; import service.demo.Hello.Iface; public class HelloImpl implements Iface { @Override public String helloString(String word) throws TException { System.out.println("get " + word); return "hello " + word; } }Server实现
package service.demo; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.server.TThreadPoolServer.Args; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import service.demo.Hello.Processor; public class Server { public void startServer() { try { TServerSocket serverTransport = new TServerSocket(1234); Hello.Processor process = new Processor(new HelloImpl()); Factory portFactory = new TBinaryProtocol.Factory(true, true); Args args = new Args(serverTransport); args.processor(process); args.protocolFactory(portFactory); TServer server = new TThreadPoolServer(args); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.startServer(); } }
JAVAClient实现
package service.demo; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException; public class Client { public void startClient() { TTransport transport; try { transport = new TSocket("localhost", 1234); TProtocol protocol = new TBinaryProtocol(transport); Hello.Client client = new Hello.Client(protocol); transport.open(); System.out.println(client.helloString("panguso")); transport.close(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { e.printStackTrace(); } } public static void main(String[] args) { Client client = new Client(); client.startClient(); } }
编写pythonClient
首先要安装一下thrift的python支持,在thrift-0.9.0\lib\py下执行python setup.py install,此处要注意的是如果在eclise下编写代码要在pvdev->interpreter-python->system pythonpath下加入C:\Python27\Lib\site-packages\thrift-0.9.0-py2.7.egg
pythonclient实现
from WebGetIce import Hello from thrift.protocol import TBinaryProtocol from thrift.transport import TSocket # Talk to a server via TCP sockets, using a binary protocol transport = TSocket.TSocket("localhost", 1234) transport.open() protocol = TBinaryProtocol.TBinaryProtocol(transport) # Use the service we already defined client = Hello.Client(protocol) print client.helloString("python") # Retrieve something as well
相关文章推荐
- thrift JAVA服务端 python客户端的实现
- netty学习九:(window7上)python客户端通过thrift调用java服务端
- java实现Thrift服务端和客户端
- thrift例子:python客户端/java服务端
- Python socket上传文件的服务端和客户端实现
- Java简单实现TCP服务端和客户端通信
- java多线程客户端服务端实现加密解密
- java实现客户端与服务端互传信息聊天(带界面)
- C#实现Thrift服务端与客户端
- 网络编程--python实现 简单的服务端和客户端
- Java IO——Socket:通过多线程实现多客户端与一个服务端通信
- Python3服务端与客户端实现
- java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中
- python实现socket客户端和服务端简单示例
- Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信
- 分享下我学习Thrift的入门例子helloworld,客户端用php,服务端用python
- Python 实现客户端 服务端 Socket通信
- 【Clion+Pycharm 网络编程】C++实现服务端,Python实现客户端
- Java简单实现UDP服务端和客户端的通信
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并