热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

thrift入门教程java篇

最近因为工作需要,需要使用thrift作为中间语言进行开发,空闲之余写这篇文章作为笔记,也提供给新手作为入门之用。官网对thrift解释如下:TheApacheThriftsoft

最近因为工作需要,需要使用thrift作为中间语言进行开发,空闲之余写这篇文章作为笔记,也提供给新手作为入门之用。
官网对thrift解释如下:

The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Javascript, Node.js, Smalltalk, OCaml and Delphi and other languages.

好吧,简单来说,thrift是一种可用于RPC通信,C/S(客户端/服务器)结构的,跨语言的IDL(Interface Description Language)。跨语言使得客户端服务器可以用不同语言进行开发,能显著提高开发的效率和灵活性。

  • 安装篇
    • 笔者写这篇文章时候已经0.9.x 的版本了,下载地址: http://thrift.apache.org/download
    • 执行命令(根据自己使用版本替换文件和目录名称):

tar xvzf thrift.tar.gz
cd thrift
./configure && make
sudo make install

- 执行thrift命令,观察是否有Usage信息输出,如果有,恭喜,安装已经成功

  • 运行调试篇
    • 运行环境jdk1.8,maven,intellij idea
    • 笔者选用的文件目录树,读者也可自行安排

      《thrift入门教程--java篇》 Paste_Image.png

    • 在pom.xml中添加以下依赖(thrift依赖根据使用的版本自行添加):


org.apache.thrift
libthrift
0.9.3


org.slf4j
slf4j-log4j12
1.5.8

- 编写demoHello.thrift代码:

service HelloWorldService {
string sayHello(1:string username)
}

- 将代码转换为java语言,并把代码移动到上图所示main/java(如果对java目录树比较熟悉随意)

thrift -gen java demoHello.thrift

- 现在已经有HelloWorldService.java文件了,接下来是接口:

import org.apache.thrift.TException;
public class HelloWorldImpl implements HelloWorldService.Iface {
public HelloWorldImpl() {
}
@Override
public String sayHello(String username) throws TException {
return "Hi," + username + " welcome to jianshu";
}
}

- 然后是服务端:

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 org.apache.thrift.transport.TTransportException;
import java.io.IOException;
import java.net.ServerSocket;
public class HelloServerDemo {
public static void main(String[] args) throws IOException, TTransportException {
final int SERVER_PORT = 8090;
ServerSocket socket = new ServerSocket(SERVER_PORT);
TServerSocket serverTransport = new TServerSocket(socket);
HelloWorldService.Processor processor = new HelloWorldService.Processor(new HelloWorldImpl());
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(processor);
tArgs.protocolFactory(new TBinaryProtocol.Factory());
TServer server = new TSimpleServer(tArgs);
System.out.println("Running server...");
server.serve();
}
}

- 最后是客户端:

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 HelloClientDemo {
public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 8090;
public static final int TIMEOUT = 30000;
public void startClient(String userName) {
TTransport transport = null;
try {
transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
TProtocol protocol = new TBinaryProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(
protocol);
transport.open();
String result = client.sayHello(userName);
System.out.println("Thrify client result =: " + result);
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
public static void main(String[] args) {
HelloClientDemo client = new HelloClientDemo();
client.startClient("Vilarsail");
}
}

- 程序写完了,先运行server,再运行client就可以看到输出了

Thrify client result =: Hi,Vilarsail welcome to my jianshu

最后为了支持原创,添加笔者的参考博文:
http://www.micmiu.com/soa/rpc/thrift-sample/
http://www.jianshu.com/p/0f4113d6ec4b
这两篇文章可能都会有编译不过或缺少依赖等等细小问题,读者可作为参考,如需转载请注明文章出处。


推荐阅读
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 探讨 OpenCV 和 Matlab 在最小二乘法直线拟合中的结果差异及原因分析
    在使用最小二乘法进行直线拟合时,OpenCV和Matlab的计算结果存在显著差异。通过详细分析发现,这种不一致性可能源于两种软件在算法实现、数据处理方式以及数值稳定性上的不同。进一步研究还表明,输入数据的格式和预处理步骤也可能对最终结果产生影响。为了确保结果的一致性和准确性,建议在实际应用中对这两种工具的输出进行对比验证,并选择最适合具体应用场景的方法。 ... [详细]
  • 本文通过对快速排序和堆排序的算法效率进行详细对比分析,探讨了快速排序在实际应用中为何能表现出更高的性能。快速排序通过分治策略实现高效排序,其平均时间复杂度为O(n log n),而堆排序虽然最坏情况下的时间复杂度也是O(n log n),但在实际运行中由于频繁的数据交换和维护堆结构的操作,导致其性能不如快速排序。此外,快速排序在缓存友好性和并行处理方面也具有明显优势,使其在现代计算机架构中表现更为出色。 ... [详细]
  • 泰波那契数列与斐波那契数列类似,但其计算方法有所不同。本文详细解析了如何高效计算第 N 个泰波那契数,并提供了一种基于动态规划的优化算法。通过使用数组记录中间结果,避免了重复计算,显著提高了算法的执行效率。代码示例展示了具体的实现方法,帮助读者更好地理解和应用这一算法。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
author-avatar
xujian6561
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有