在新的项目中公司在平台内部系统间使用Thrift通讯,都没有听说过。然后听同事说,是跨语言Socket通讯的开源组件。
功能及特点
1.跨平台和语言的Socket通讯组件。
2.根据伪代码的结构语言定义对象和服务结构,然后生成各语言的代码和接口
3.各语言根据组件提供的库,编写客户端和服务器端程序。服务器端实现接口并编写业务逻辑。
4.服务器端支持多种序列化方式(Binary,Compact,JSON等)和多种服务器实现
太晚了,以后在完善,先贴代码了
本测试使用WINDOW环境和JAVA语言
1.下载和安装
下载地址:http://thrift.apache.org
下载最新版本,当前0.7.0
解压
thrift-x.x.x.tar.gz
,进入thrift-x.x.x/lib/java,在cmd模式先使用ant编译(ant安装和设置就不说了哈。然后需要上公网,昨天在公司弄不起就是公司上不了公网,热)。
2.建立测试工程
普通JAVA工程,目录如下:
src
+ org.acooly.thrift.demo.client 客户端代码
+ org.acooly.thrift.demo.generalcode 通过thrift工具生成的代码
+ org.acooly.thrift.demo.server 服务器端代码
lib
+拷贝前面ant编译后的build/lib下的jar和编译生成的thrift-x.x.x.jar
tools
+ thrift.exe 前面下载的
+ thriftdemo.thrift 伪代码
3.编写伪代码文件*.thrift
namespace java org.acooly.thrift.demo.generalcode
struct Contact{
1:i32 id
2:string name
3:i64 birthday
4:string phoneNo
5:string ipAddress
6:map<string,string> props
}
service ContactManager{
void save(1:Contact contact)
void remove(1:i32 id)
list<Contact> getAll();
list<Contact> query(1:map<string,string> conditions)
}
4.生成代码
cmd模式进入 tools目录,运行
thrift.exe -gen java thriftdemo.thrift
运行成功后,在本目录会生成gen-java目录,拷贝该目录下生成的代码到工程中对应的包。
5.服务器代码和实现业务逻辑
实现业务逻辑
package org.acooly.thrift.demo.server;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import org.acooly.thrift.demo.generalcode.Contact;
import org.acooly.thrift.demo.generalcode.ContactManager;
import org.apache.thrift.TException;
public class ContactManagerImpl implements ContactManager.Iface{
public List<Contact> getAll() throws TException {
List<Contact> contacts = new ArrayList<Contact>();
contacts.add(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));
return contacts;
}
public List<Contact> query(Map<String, String> conditions) throws TException {
List<Contact> contacts = new ArrayList<Contact>();
contacts.add(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));
return contacts;
}
public void remove(int id) throws TException {
System.out.println("invoke: remove,id = " + id);
}
public void save(Contact contact) throws TException {
System.out.println("invoke: save,contact = " + contact);
}
}
编写服务器代码
package org.acooly.thrift.demo.server;
import org.acooly.thrift.demo.generalcode.ContactManager;
import org.acooly.thrift.demo.generalcode.ContactManager.Iface;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TCompactProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.server.TServer.Args;
import org.apache.thrift.transport.TServerSocket;
public class ThriftServer {
public static void main(String[] args) throws Exception{
TServerSocket serverSocket = new TServerSocket(8111);
ContactManager.Processor<Iface> processor = new ContactManager.Processor<Iface>(new ContactManagerImpl());
Factory factory = new TCompactProtocol.Factory();
Args ag = new Args(serverSocket);
ag.outputProtocolFactory(factory);
ag.inputProtocolFactory(factory);
ag.processor(processor);
TServer server = new TSimpleServer(ag);
server.serve();
}
}
6.客户端代码
package org.acooly.thrift.demo.client;
import java.util.Calendar;
import java.util.List;
import org.acooly.thrift.demo.generalcode.Contact;
import org.acooly.thrift.demo.generalcode.ContactManager;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
public class ThriftClient {
public static void main(String[] args) throws Exception{
TTransport transport = new TSocket("localhost",8111);
TProtocol protocol = new TCompactProtocol(transport);
ContactManager.Client client = new ContactManager.Client(protocol);
transport.open();
List<Contact> list = client.getAll();
System.out.println(list);
client.save(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));
client.remove(1);
transport.close();
}
}
7.启动和测试运行
1.运行ThriftServer
2.运行ThriftClient
ThriftServer输出:
invoke: save,contact = Contact(id:1, name:zhangpu, birthday:1308591769148, phoneNo:1389612222, ipAddress:192.168.2.1, props:null)
invoke: remove,id = 1
ThriftClient输出:
[Contact(id:1, name:zhangpu, birthday:1308591769131, phoneNo:1389612222, ipAddress:192.168.2.1, props:null)]
分享到:
相关推荐
### Thrift入门学习教程 #### 一、Thrift概述 Thrift是由Facebook开发并在2007年贡献给Apache基金会的一款开源项目。它的主要目的是解决跨平台、跨语言的系统间大数据量传输通信问题。在早期,Facebook面临着系统...
在入门Thrift时,你需要做以下几步: 1. 安装Thrift编译器:根据操作系统和需求,从Apache Thrift官网下载相应版本的编译器。 2. 编写IDL文件:定义你的服务接口和数据类型。 3. 生成代码:运行Thrift编译器,...
### Thrift初级入门教程 #### 一、简介 Thrift 是由 Facebook 开发的一款软件库和一组代码生成工具,旨在加速高效且可扩展的后端服务的开发与实现。通过抽象出不同编程语言中最常用的部分,并将其封装进一个通用库...
Thrift作为可伸缩的跨语言服务开发框架,网上的资源较少,这里是一个简单的入门小程序,文件中的mylib下包含了依赖的jar包,并且在file目录下放了一个简单的thrift文件和生成thrift-0.9.0.exe工具,直接使用 thrift-...
Thrift 入门指南 Thrift 是一种高性能的通讯中间件,支持多种编程语言,可以实现跨语言和跨平台的数据交换和 RPC 服务。Thrift 由 Facebook 开源,于 2007 年提交 Apache 软件基金会。Thrift 可以支持多种编程语言...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,后来成为Apache软件基金会的顶级项目。它允许程序员定义服务接口,然后自动生成各种编程语言的代码,使得服务提供者和服务消费者可以使用不同...
【Thrift 简介】 Thrift 是一个开源的接口定义语言和跨语言的通信框架,最初由 Facebook 开发,目的是解决大规模跨语言服务开发的问题。Thrift 允许开发者定义服务接口,然后生成不同编程语言的代码,使得在各种...
在"Thrift入门及Java实例演示"中,我们可以预期学习到以下核心知识点: 1. **Thrift IDL**:Thrift的接口定义语言类似于C++或Java的接口,用于定义服务、结构体、异常和枚举等。例如,你可以定义一个简单的服务,...
通俗简单的介绍了什么是thrift,适用于thrift或RPC扫盲。
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,其目的是为了高效地实现不同编程语言之间的通信。Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务接口,然后...
然后运行 restart_thrift.sh 脚本就可以直接启动 ps 一下进程是否正常,如果错误请查看日志 然后就可以使用线下的php直接调用, 代码是从网上找到的,比较容易入门 当然也可以直接导入java目录下的java工程,直接运行...
Thrift是一种高效的、跨语言的服务框架,最初由Facebook开发,现在是Apache的顶级项目。它提供了强大的代码生成工具,可以从接口定义文件(IDL)生成多种编程语言的客户端和服务端代码,使得不同语言之间可以轻松地...
首先,`Thrift简介.docx`可能是关于Thrift的入门文档,介绍了Thrift的概念、特点和用途。Thrift的主要特点包括高效、类型安全以及支持多种编程语言,如Java、C++、Python等。它通过定义服务接口,使得不同语言之间...
总之,结合Wireshark和Thrift dissector,我们可以深入洞察Thrift协议的网络交互,这对于开发、调试和维护Thrift服务具有极大的价值。请确保正确配置和使用这些工具,以便充分利用它们的功能,提升你的工作效率。
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年创建,现在是Apache软件基金会的项目。它的主要目标是通过定义一种中间语言(IDL,Interface Definition Language)来简化不同编程语言之间的通信,使得...
Thrift是Facebook开源的一款高性能、跨语言的服务框架,它的设计目标是高效地在不同编程语言之间进行通信。本文将基于Thrift的Java实现,总结学习过程中的一些关键知识点,旨在帮助理解Thrift的工作原理以及如何在...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开源,现在由Apache软件基金会维护。它的主要功能是定义数据结构和服务接口,然后自动生成多种编程语言的代码,实现这些接口,使得不同语言之间可以进行...
在IT行业中,Thrift是一种高性能、可扩展的跨语言服务开发框架,由Facebook开源,用于构建分布式服务。它通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成不同编程语言的代码,使得不同语言之间...
thrift --gen py example.thrift ./client.py 提交 节俭文件 一个简单的节俭文件。 一种服务扩展了另一种服务,并且存在异常。 目的是在尽可能小的空间内呈现出许多深奥的案例。 产生节俭服务 注意main.go顶部的//...