千家信息网

Thrift在windows7下的安装与实践

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文借鉴自http://www.jianshu.com/p/0f4113d6ec4b(下面称简书教程)首先上官网下载代码https://thrift.apache.org/download下载源码th
千家信息网最后更新 2026年11月02日Thrift在windows7下的安装与实践

本文借鉴自

http://www.jianshu.com/p/0f4113d6ec4b

(下面称简书教程)


首先上官网下载代码

https://thrift.apache.org/download

下载源码thrift-0.9.3.tar.gz

解压之后放在路径C:\thrift-0.9.3\thrift-0.9.3

并下载windows执行版thrift-0.9.3.exe

放在路径C:\thrift-0.9.3下


下载apache ant项目,用于打jar包

下载路径

http://ant.apache.org/bindownload.cgi

解压之后放在路径C:\apache-ant-1.9.7-bin\apache-ant-1.9.7

配置环境变量

ANT_HOME : C:\apache-ant-1.9.7-bin\apache-ant-1.9.7

把C:\apache-ant-1.9.7-bin\apache-ant-1.9.7\bin\ant.bat复制到路径C:\thrift-0.9.3\thrift-0.9.3\lib\java下

在cmd中运行ant.bat,会生成jar包libthrift-0.9.3 在路径C:\thrift-0.9.3\thrift-0.9.3\lib\java\build


在路径C:\thrift-0.9.3中创建一个文本文件

复制代码

namespace java com.winwill.thrift
enum RequestType {
SAY_HELLO, //问好
QUERY_TIME, //询问时间}struct Request {
1: required RequestType type; // 请求的类型,必选
2: required string name; // 发起请求的人的名字,必选
3: optional i32 age; // 发起请求的人的年龄,可选
}

exception RequestException {
1: required i32 code;
2: optional string reason;
}
// 服务名
service HelloWordService {
string doAction(1: Request request) throws (1:RequestException qe);
// 可能抛出异常。
}

保存为Test.thrift


在cmd中进入路径C:\thrift-0.9.3

执行命令thrift-0.9.3 -gen java Test.thrift

会在路径C:\thrift-0.9.3下生成一个文件夹gen-java


在Eclipse中创建工程TestThrift

按照简书教程生成package

com.winwill.thrift

把上面生成的gen-java中的代码复制到package中

并在package中创建代码,由于可能跟简书教程使用的版本不同,简书教程中的某些写法无法编译,

经过修改后使用如下代码

1.服务端

package com.winwill.thrift;


import org.apache.commons.lang3.StringUtils;
import org.apache.thrift.TException;

import java.util.Date;

public class HelloWordServiceImpl implements com.winwill.thrift.HelloWordService.Iface {
// 实现这个方法完成具体的逻辑。
public String doAction(com.winwill.thrift.Request request) throws com.winwill.thrift.RequestException, TException {
System.out.println("Get request: " + request);
if (StringUtils.isBlank(request.getName()) || request.getType() == null) {
throw new com.winwill.thrift.RequestException();
}
String result = "Hello, " + request.getName();
if (request.getType() == com.winwill.thrift.RequestType.SAY_HELLO) {
result += ", Welcome!";
} else {
result += ", Now is " + new Date().toLocaleString();
}
return result;
}
}

2.启动服务

package com.winwill.thrift;

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TJSONProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TFastFramedTransport;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportFactory;
import org.slf4j.*;
import java.net.ServerSocket;

public class HelloWordServer {
public static void main(String[] args) throws Exception {
int port = 7912;
String transport_type = "buffered";
String protocol_type = "binary";
String server_type = "thread-pool";
String domain_socket = "";
// ServerSocket socket = new ServerSocket(7912);
// Protocol factory
TProtocolFactory tProtocolFactory = null;
if (protocol_type.equals("json")) {
tProtocolFactory = new TJSONProtocol.Factory();
} else if (protocol_type.equals("compact")) {
tProtocolFactory = new TCompactProtocol.Factory();
} else {
tProtocolFactory = new TBinaryProtocol.Factory();
}

TTransportFactory tTransportFactory = null;

if (transport_type.equals("framed")) {
tTransportFactory = new TFramedTransport.Factory();
} else if (transport_type.equals("fastframed")) {
tTransportFactory = new TFastFramedTransport.Factory();
} else { // .equals("buffered") => default value
tTransportFactory = new TTransportFactory();
}
TServerSocket serverTransport = new TServerSocket(new TServerSocket.ServerSocketTransportArgs().port(port));;
com.winwill.thrift.HelloWordService.Processor processor = new com.winwill.thrift.HelloWordService.Processor(new HelloWordServiceImpl());
TServer.Args tServerArgs = new TServer.Args(serverTransport);
tServerArgs.processor(processor);
tServerArgs.protocolFactory(tProtocolFactory);
tServerArgs.transportFactory(tTransportFactory);
TServer server = new TSimpleServer(tServerArgs);
System.out.println("Running server...");
server.serve();
}
}

3.客户端请求

package com.winwill.thrift;

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

public class HelloWordClient {
public static void main(String[] args) throws Exception {
TTransport transport = new TSocket("【此处使用服务器ip地址】", 7912);
TProtocol protocol = new TBinaryProtocol(transport);

// 创建client
com.winwill.thrift.HelloWordService.Client client = new com.winwill.thrift.HelloWordService.Client(protocol);

transport.open(); // 建立连接

// 第一种请求类型
com.winwill.thrift.Request request = new com.winwill.thrift.Request()
.setType(com.winwill.thrift.RequestType.SAY_HELLO).setName("winwill2012").setAge(24);
System.out.println(client.doAction(request));

// 第二种请求类型
request.setType(com.winwill.thrift.RequestType.QUERY_TIME).setName("winwill2012");
System.out.println(client.doAction(request));

transport.close(); // 请求结束,断开连接
}
}

在一台服务器上测试启动服务

输出Running server...

在另一台机器启动客户端

输出

Hello, winwill2012, Welcome!

Hello, winwill2012, Now is 2016-10-13 17:06:47

此时服务器端输出

Get request: Request(type:SAY_HELLO, name:winwill2012, age:24)

Get request: Request(type:QUERY_TIME, name:winwill2012, age:24)

说明已经成功连接啦

本文所用到的工具和工程已经打包上传到云盘,欢迎大家下载

链接:http://pan.baidu.com/s/1jHQXSma 密码:65uh

路径 服务 代码 教程 生成 服务器 类型 中创 输出 客户 客户端 工程 文件 不同 成功 写法 变量 名字 命令 地址 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网属科技 科技互联网政务服务 新华互联网科技学院 互联网与科技发展 互联网 科技创新 中国 科技 互联网 丰台科技园 互联网公司 盛创互联网科技有限公司 来此购互联网科技有限公司 厦门比较好的科技互联网公司 互联网科技与大数据专业 广西互联网科技孵化中心 本届互联网博览会上的黑科技 合肥互联网科技公司公章图片 江苏苏星互联网科技有限公司 科技信息时代互联网发展 悟空问答互联网科技 互联网科技品牌 亚光科技低轨卫星互联网 武汉亿视互联网科技有限公司 河南云网互联网络科技有限公司 互联网最新的科技 互联网金融公司科技 睿民互联网科技 润盈互联网科技 宁波青枫互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 工业互联网等科技实现智能化赋能 互联网科技公司营业执照怎么办理 广州梦谷互联网科技有限公司领导
0