thrift JAVA服务端 python客户端的实现

2024-09-01 20:38

本文主要是介绍thrift JAVA服务端 python客户端的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近用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

[plain]  view plain copy
  1. namespace java service.demo  
  2. service Hello {  
  3.     string helloString(1:string word)  
  4. }  

再生成JAVA文件与python文件

[plain]  view plain copy
  1. thrift --gen java demo.thrift  
  2. thrift --gen py demo.thrift  


接下来编译thrift的JAVA代码,解压 thrift-0.9.0.tar.gz ,在thrift-0.9.0\lib\java目录下用ant编译

编写JAVAServer

接口方法实现

[java]  view plain copy
  1. package service.demo;  
  2.   
  3. import org.apache.thrift.TException;  
  4.   
  5. import service.demo.Hello.Iface;  
  6.   
  7. public class HelloImpl implements Iface {  
  8.   
  9.     @Override  
  10.     public String helloString(String word) throws TException {  
  11.         System.out.println("get " + word);  
  12.         return "hello " + word;  
  13.     }  
  14.   
  15. }  
Server实现

[java]  view plain copy
  1. package service.demo;  
  2.   
  3. import org.apache.thrift.protocol.TBinaryProtocol;  
  4. import org.apache.thrift.protocol.TBinaryProtocol.Factory;  
  5. import org.apache.thrift.server.TServer;  
  6. import org.apache.thrift.server.TThreadPoolServer;  
  7. import org.apache.thrift.server.TThreadPoolServer.Args;  
  8. import org.apache.thrift.transport.TServerSocket;  
  9. import org.apache.thrift.transport.TTransportException;  
  10.   
  11. import service.demo.Hello.Processor;  
  12.   
  13. public class Server {  
  14.   
  15.     public void startServer() {  
  16.         try {  
  17.             TServerSocket serverTransport = new TServerSocket(1234);  
  18.             Hello.Processor process = new Processor(new HelloImpl());  
  19.             Factory portFactory = new TBinaryProtocol.Factory(truetrue);  
  20.             Args args = new Args(serverTransport);  
  21.             args.processor(process);  
  22.             args.protocolFactory(portFactory);  
  23.             TServer server = new TThreadPoolServer(args);  
  24.             server.serve();  
  25.         } catch (TTransportException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29.       
  30.     public static void main(String[] args) {  
  31.         Server server = new Server();  
  32.         server.startServer();  
  33.     }  
  34. }  

JAVAClient实现

[java]  view plain copy
  1. package service.demo;  
  2.   
  3. import org.apache.thrift.TException;  
  4. import org.apache.thrift.protocol.TBinaryProtocol;  
  5. import org.apache.thrift.protocol.TProtocol;  
  6. import org.apache.thrift.transport.TSocket;  
  7. import org.apache.thrift.transport.TTransport;  
  8. import org.apache.thrift.transport.TTransportException;  
  9.   
  10. public class Client {  
  11.   
  12.     public void startClient() {  
  13.         TTransport transport;  
  14.         try {  
  15.             transport = new TSocket("localhost"1234);  
  16.             TProtocol protocol = new TBinaryProtocol(transport);  
  17.             Hello.Client client = new Hello.Client(protocol);  
  18.             transport.open();  
  19.             System.out.println(client.helloString("panguso"));  
  20.             transport.close();  
  21.         } catch (TTransportException e) {  
  22.             e.printStackTrace();  
  23.         } catch (TException e) {  
  24.             e.printStackTrace();  
  25.         }  
  26.     }  
  27.   
  28.     public static void main(String[] args) {  
  29.         Client client = new Client();  
  30.         client.startClient();  
  31.     }  
  32. }  

编写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实现

[python]  view plain copy
  1. from WebGetIce import Hello  
  2. from thrift.protocol import TBinaryProtocol  
  3. from thrift.transport import TSocket  
  4.   
  5. # Talk to a server via TCP sockets, using a binary protocol  
  6. transport = TSocket.TSocket("localhost"1234)  
  7. transport.open()  
  8. protocol = TBinaryProtocol.TBinaryProtocol(transport)  
  9.   
  10. # Use the service we already defined  
  11. client = Hello.Client(protocol)  
  12. print client.helloString("python")  
  13. # Retrieve something as well  

这篇关于thrift JAVA服务端 python客户端的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127986

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很