thrift系列 - 多语言实例 for java和python

1.简述

本文主要介绍thrift多语言、跨语言的代码实例。Thrift对多语言的支持非常不错,定义一个thrift接口文件,通过thrift IDL compiler(代码生成引擎)生成各个语言的代码,将各自语言的代码放入各自语言的工程中,写好服务端和客户端程序,通信的问题即刻解决。

2.简单架构图

示例的thrift接口文件,test8.thrift:

service TestService {
  string test(1: i32 num,2: string name)
}

代码生成方法,文件定义方法,请参见thrift系列文章:

快速入门:http://blog.csdn.net/hrn1216/article/details/51274934

类型定义:http://blog.csdn.net/hrn1216/article/details/51306395

3.python code

python底层代码生成之后,需要加入到工程中去。请确保你的环境中有thrift模块,如果没有请下载安装。下载地址:https://pypi.python.org/pypi/thrift/0.9.3  。安装方法很简单,解压下载的包后,命令行进入到thrift-0.9.3的目录下,使用命令:python setup.py install 即可完成模块的安装。

下面是python工程的包结构:

以下是 python 服务端的代码:

# -*- coding:utf-8 -*-
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
#根据实际的包结构去引入
from test8 import TestService

#test8.thrift的具体实现
class TestServiceHandler:
    def __init__(self):
        self.log = {}

    def test(self,num,name):
        return name + str(num)

if __name__ == '__main__':
    handler = TestServiceHandler()
    processor = TestService.Processor(handler)
    transport = TSocket.TServerSocket(host='127.0.0.1',port=9090)
    tfactory = TTransport.TBufferedTransportFactory()
    pfactory = TBinaryProtocol.TBinaryProtocolFactory()

    server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
    print 'python server:ready to start'
    server.serve()

4.java code

将生成的TestService.java加入到java工程中去,以下是java客户端的代码:

package test8;

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 static void main(String[] args) {
		//配置服务端的请求信息
		TTransport transport = new TSocket("127.0.0.1", 9090);
		try {
			transport.open();
			TProtocol protocol = new TBinaryProtocol(transport);
			TestService.Client client = new TestService.Client(protocol);

			//接口调用
			String rs = client.test(123, "test");
			//打印调用结果
			System.out.println("java client:" + rs);
			transport.close();
		} catch (TTransportException e) {
			e.printStackTrace();
		} catch (TException e) {
			e.printStackTrace();
		}
	}
}

5.demo运行

先运行python的服务端,如果运行正常,将打印出:python server:ready to start

再运行java的客户端,如果运行正常,将打印出:java client:test123

本文内容参考如下:

【1】http://thrift.apache.org/

注意:

如您发现本文档中有明显错误的地方,

或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。

转载或使用本文档时,请作醒目说明。

必要时请联系作者,否则将追究相应的法律责任。

note:

If you find this document with any error ,

Or if you find any illegal citations , please contact me correct.

Reprint or use of this document,Please explain for striking.

Please contact the author if necessary, or they will pursue the corresponding legal responsibility.

时间: 2024-10-19 17:57:29

thrift系列 - 多语言实例 for java和python的相关文章

2018年人工智能、大数据的爆发,学Java还是Python?

随着互联网的发展,编程语言成为炙手可热的专业.时下较流行的语言有:Java.Python.大数据.PHP等,Java.Python在编程语言中均位居前列. Java源自C和C++的技术体系,于1995年推出,定位于给专门的程序员设计大型的复杂分布式应用而设计. 而Python是1991年推出(比Java还早)主要面向于系统管理,科研,教育和非程序员群体等. 在人工智能和大数据时代,Python和java这2门编程语言都很优秀,也很火爆,那么我们如何选择呢? 人生苦短,我用Python如果真要选择

三大语言实例 (python,C/C++,Java)

Python3.5语言实例: #coding = utf-8 import sys def Sub_string(a,b): c=[0]*len(b) for i in range(len(a)): for j in range(len(b)): if str(a[i]).find(str(b[j]))!=-1: c[j] = c[j] + 1 for k in c: print(k) if __name__=='__main__': N=int(sys.stdin.readline().str

Apache Thrift系列详解(一)- 概述与入门

前言Thrift是一个轻量级.跨语言的远程服务调用框架,最初由Facebook开发,后面进入Apache开源项目.它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码. Thrift支持多种不同的编程语言,包括C++.Java.Python.PHP.Ruby等,本系列主要讲述基于Java语言的Thrift的配置方式和具体使用. 正文Thrift的技术栈Thrift对软件栈的定义非常的清晰, 使得各个组件能够松散的耦合, 针对不同的应用场景, 选择不同是方

实例分析Java Class的文件结构

实例分析Java Class的文件结构 博客分类: Java SE 今天把之前在Evernote中的笔记重新整理了一下,发上来供对java class 文件结构的有兴趣的同学参考一下. 学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号,说“一次编写,到处运行”,其实说到无关性,Java平台还有另外一个无关性那就是语言无关性,要实现语言无关性,那么Java体系中的class的文件结构或者说是字节码就显得相当重要了,其实Java从刚开始的时候就有两套规范,一个是Java语言规

[转]实例分析Java Class的文件结构

学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号,说“一次编写,到处运行”,其实说到无关性,Java平台还有另外一个无关 性那就是语言无关性,要实现语言无关性,那么Java体系中的class的文件结构或者说是字节码就显得相当重要了,其实Java从刚开始的时候就有两套 规范,一个是Java语言规范,另外一个是Java虚拟机规范,Java语言规范只是规定了Java语言相关的约束以及规则,而虚拟机规范则才是真正从跨 平台的角度去设计的.今天我们就以一个实际的例子来看看,到底Ja

Java GC系列(1):Java垃圾回收简介

本文由 ImportNew - 好好先生 翻译自 javapapers. Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程序员更好地编写Java程序. 下面四篇教程是了解Java 垃圾回收(GC)的基础: 垃圾回收简介 圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 这篇教程是系列第一部分.首先会解释基本的术语,比如JDK.JVM.JRE和HotSpotVM.接着会介

Java基础系列5:深入理解Java异常体系

该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 前言: Java的基本理念是“结构不佳的代码不能运行”. “异常”这个词有“我对此感到意外”的意思.问题出现了,你也许不清楚该如何处理,但你的确知道不应该置之不理:你要停下来,看看是不是有别人或在别的地方,能够处理这个问题.只是在当前的环境中还没有足够的信息来解决这个问题,所以就把这个问题提交到一个更高级别的环境中,在

基于Thrift的跨语言、高可用、高性能、轻量级的RPC框架

功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点的异常down机 可视化管理 通过服务管理系统可以方便查看服务状态和统计信息 与原生thrift通信 支持与原生thrift服务进行通信 与业内方案的对比 与thrift.avro.hessian相比,harpc支持了高可用,并且更加易用 与dubbo相比,harpc支持了跨语言,并且更轻量级 与i

利用thrift在c++、java和python之间相互调用

转自:http://blog.csdn.net/andy_yf/article/details/7487384 thrift做为跨语言调用的方案有高效,支持语言较多,成熟等优点:代码侵入较强是其弱点. 下面记录以C++做服务器,C++,java和python做客户端的示例,这个和本人现在工作环境吻合,使用多线程长连接的socket来建立高效分布式系统的跨语言调用平台.遗憾的是目前版本(0.7.0)的C语言还不支持Compact协议,导致在现在的环境中nginx c module调用thrift要