代码结构:
1>>>>>> demoHello.thrift:
namespace java xdg.luozhonghua.thrift.service
/*
struct UserProfile {
1: i32 uid = 1,
2: string name = "User1",
3: string blurb,
4: list<i32> subNodeList,
5: map<i32,string> subNodeMap,
6: set<i32> subNodeSet
}
service HelloWorldService {
UserStruct addUser(1: UserStruct userStruct)
UserStruct getUser(1: i32 userId)
list<UserStruct> findAllUser()
list<UserStruct> findUser(1: map<string,string> parameterMap)
string sayHello(1:string username)
string getAge(1:i32 agr)
set<i32> subNodeSet1(1: UserStruct userStruct)
map<i32,string> subNodeMap1(1: UserStruct userStruct)
list<i32> subNodeList1(1: UserStruct userStruct)
}
*/
struct Blog {
1:string topic
2:binary content
3:i64 createTime
4:string id
5:string ipAddress
6:map<string,string> props
}
service HelloWorldService {
string sayHello(1:string username)
i32 testCase1(1:i32 num1, 2:i32 num2,3:string num3)
list<string> testCase2(1:map<string,string> num1)
void testCase3()
void testCase4(1:list<Blog> blog)
}
2>>>>>>生成文件:
Blog.java
HelloWorldService.java
3>>>>>>HelloWorldImpl .java:
package xdg.luozhonghua.thrift.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.thrift.TException;
import xdg.luozhonghua.thrift.service.Blog;
import xdg.luozhonghua.thrift.service.HelloWorldService.Iface;
public class HelloWorldImpl implements Iface{
public String sayHello(String username) throws TException {
// TODO Auto-generated method stub
return "Hi," + username + " welcome to my blog blog.csdn.net/luozhonghua2014";
}
@Override
public int testCase1(int num1, int num2, String num3) throws TException {
// TODO Auto-generated method stub
return num1+num2;
}
@Override
public List<String> testCase2(Map<String, String> num1) throws TException {
//System.out.print("testCase2");
List<String> list=new ArrayList<String>();
for(String str:num1.keySet()){
list.add(str);
}
return list;
}
@Override
public void testCase3() throws TException {
// TODO Auto-generated method stub
System.out.print("testCase3");
}
@Override
public void testCase4(List<Blog> blog) throws TException {
System.out.print("testCase4 "+blog.size());
}
}
4>>>>>>HelloServerDemo.java
package xdg.luozhonghua.thrift.test;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import xdg.luozhonghua.thrift.demo.HelloWorldImpl;
import xdg.luozhonghua.thrift.service.HelloWorldService;
public class HelloServerDemo {
public static final int SERVER_PORT = 8090;
public void startServer() {
try {
System.out.println("HelloWorld TSimpleServer start ....");
TProcessor tprocessor = new HelloWorldService.Processor(new HelloWorldImpl());
// HelloWorldService.Processor<HelloWorldService.Iface>
// tprocessor =
// new HelloWorldService.Processor<HelloWorldService.Iface>(
// new HelloWorldImpl());
// 简单的单线程服务模型,一般用于测试
TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.protocolFactory(new TBinaryProtocol.Factory());
// tArgs.protocolFactory(new TCompactProtocol.Factory());
// tArgs.protocolFactory(new TJSONProtocol.Factory());
TServer server = new TSimpleServer(tArgs);
server.serve();
} catch (Exception e) {
System.out.println("Server start error!!!");
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
HelloServerDemo server = new HelloServerDemo();
server.startServer();
}
}
5>>>>>>HelloClientDemo.java
package xdg.luozhonghua.thrift.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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;
import xdg.luozhonghua.thrift.service.Blog;
import xdg.luozhonghua.thrift.service.HelloWorldService;
public class HelloClientDemo {
public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 8090;
public static final int TIMEOUT = 30000;
/**
*
* @param userName
*/
public void startClient(String userName) {
TTransport transport = null;
try {
transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
// 协议要和服务端一致
TProtocol protocol = new TBinaryProtocol(transport);
// TProtocol protocol = new TCompactProtocol(transport);
// TProtocol protocol = new TJSONProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(
protocol);
transport.open();
String result = client.sayHello(userName);
int t=client.testCase1(1, 2, "aaaa");
Map<String,String> map=new HashMap<String,String>();
map.put("aaa", "1111");
map.put("bbb", "2222");
List<Blog> list=new ArrayList<Blog>();
for(int i=0;i<5;i++){
Blog b=new Blog();
b.setId(i+"");
b.setTopic("afdaf"+i);
b.setCreateTime(new Date().getTime());
list.add(b);
}
client.testCase4(list);
System.out.println(t+"\t\n Thrify client result =: " + result);
System.out.println(client.testCase2(map));
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
HelloClientDemo client = new HelloClientDemo();
client.startClient("嘻嘻嘻");
}
}
运行结果:
server:
HelloWorld TSimpleServer start ....
testCase4 5
client:
3
Thrify client result =: Hi,嘻嘻嘻 welcome to my blog blog.csdn.net/luozhonghua2014
[bbb, aaa]
分享到:
相关推荐
Thrift是一种高效的、跨语言的服务框架,最初由Facebook开发,现在是Apache的顶级...通过学习和理解这个案例,开发者可以更好地理解和应用Thrift在分布式系统中的角色,以及如何扩展其通信能力以适应不同的网络环境。
通信过程中,Thrift会自动处理数据的序列化和反序列化,使得不同语言之间可以无缝交互。 这个示例的价值在于展示了如何使用Thrift在Java和PHP这两个不同的编程环境中构建分布式系统。它简化了跨语言服务开发的复杂...
ThriftTest Java案例代码是针对Thrift框架在Windows操作系统下进行Java开发的一个实践示例。Thrift是一种跨语言的服务框架,由Facebook开源,它通过定义数据类型和服务接口,自动生成不同编程语言的客户端和服务器端...
在这个场景中,"JSClient"指的是JavaScript客户端库,允许JavaScript应用程序与Thrift服务端进行交互。 描述中提到的博客链接可能提供了关于如何在JavaScript中使用Thrift客户端的教程或实践案例。虽然没有具体的...
在本案例中,"thrift1 查询hbase"是指使用Python通过Thrift1接口来与HBase进行交互,实现数据的查询操作。下面将详细讲解这个过程。 1. **Thrift接口**:Thrift提供了一种序列化和RPC(远程过程调用)机制,允许...
Thrift IDL允许开发者以一种声明式的方式定义服务接口和数据结构,然后通过Thrift编译器自动生成对应语言的客户端和服务端代码,支持的语言包括C++、Java、Python、PHP等,这极大地简化了跨语言服务开发的复杂性。...
对于“毕业设计论文”和“计算机案例”,Thrift是一个很好的研究主题,因为它涉及到分布式系统的设计、跨语言通信的实现以及性能优化等多个方面。通过学习和使用Thrift,学生可以深入理解服务化架构和如何在实际项目...
例如,一个Java服务可以作为Thrift服务器,而Python或Go的客户端可以轻松地与其交互。 Thrift.pptx文件可能是关于Thrift的演示文稿,可能包含以下内容: - Thrift的起源和背景介绍 - Thrift的基本概念和组件 - 如何...
在污水处理领域的案例中,Thrift可能用于监控和控制系统的数据交换。例如,当氧化沟的处理能力需要提升时,可以通过增加微生物量或改进供氧系统来减少污泥负荷。在这个过程中,Thrift可以用来建立监控系统和控制中心...
本案例聚焦于Java和Python这两种广泛应用的语言之间的交互。"javaToPython.zip"压缩包包含了一个实例,演示了如何使用Java项目远程调用Python项目,以实现Java与Python的集成。以下是关于这个主题的详细知识: 1. *...
本案例中,我们关注的是C++作为客户端与Java作为服务端的交互。这两种语言有着不同的特性和应用场景,但通过特定的技术和协议,可以实现它们之间的无缝通信。 1. **JNI(Java Native Interface)**:Java服务端可以...
9. **Thrift**:这是一个跨语言的服务开发框架,由Facebook开发,它允许定义数据结构和服务接口,然后自动生成代码,支持Java和其他多种语言进行跨平台通信。 10. **Protocol Buffers**:Google开发的一种数据序列...
Java提供了多种序列化机制,如Java自带的序列化,或者第三方库如Google的Protocol Buffers和Facebook的Thrift。 6. **安全机制**:游戏服务器需要防止作弊和非法访问,因此可能包含加密、认证和授权机制,如SSL/TLS...
6. **现代替代方案**:随着技术的发展,诸如Hadoop的RPC、gRPC、Thrift等更现代化的远程调用框架出现了,它们提供了更多功能和更好的性能,但RMI依然是学习分布式系统和Java网络编程的经典案例。 7. **RMI的应用...
要使用这个API,开发者首先需要解压talool-thrift-api-master,然后使用Java环境和Thrift编译器来生成所需的客户端和服务器端代码。接着,将生成的服务器端代码部署到Java Web服务器上,并启动服务。客户端代码可以...
外部APIs章节提供了非Java语言与JVM交互的方法,包括REST、Thrift和C/C++客户端,让多种编程语言都能轻松地与HBase通信。 性能调优是HBase高效运行的关键,涉及操作系统、网络、Java虚拟机、HBase配置、ZooKeeper、...
- 生产中间数据和结果数据,用于模型训练,对可用性和一致性要求较低,但批量查询时要求高吞吐。 - 线上系统的备份数据,查询频率低,但延时要求高。 具体应用案例: **场景一:订单事件** - 订单状态表使用反向...
- 讨论了HBase的外部APIs,包括支持非Java语言的交互方式,REST和Thrift接口,以及C/C++ API。 11. 性能调优部分: - 提供了一系列性能调优的指南和最佳实践。 - 分别从操作系统、网络、Java、HBase配置、...
综上,"heegproto"项目是一个涉及到Thrift协议的实际应用案例,通过学习和理解Thrift,开发者可以更好地理解和使用该项目,实现高效的数据通信和服务交互。在实际开发中,还需要结合具体的业务需求和系统环境,灵活...