文件设置Thrift实例

时间紧张,先记一笔,后续优化与完善。

    要学习Thrift,它的官网上有资料分析以及实例,可以到官网:http://thrift.apache.org/上查看。

    在官网下载thrift的资源包,安装编译生成响应语言下的jar包,详细在windows下或者ubuntu下的安装参见:

    Thrift 学习笔记2——Windows环境下Thrift的安装、编译以及测试

    Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试

    我主要是利用java语言实现Thrift的实例。因为感觉安装起来比拟麻烦,所以不想去安装thrift,我直接应用别人已经编译好的jar包,将这些jar包直接添加到我的Myeclipse工程下就能够编写Thrift的项目了。此外,thrift文件主动生成java代码需要应用thrift-0.9.0.exe,以上文件可以到这里去下载:

    thrift-0.9.0.exe下载地址

    Java语言Thrift工程需要的jar包下载地址

    libthrift-0.9.0.jar

    下面通过几个实例来说明Thrift的应用方法:

    1、我们将下载的thrift-0.9.0.exe放置在目录D:\Thrift下

    2、编写Hello.thrift文件

service Hello{string helloString(1:string para)i32 helloInt(1:i32 para)bool helloBoolean(1:bool para)void helloVoid()string helloNull()
}

    这是应用IDL描述性语言编写的Thrift文件,包括了5个方法,每一个方法包括一个方法名,参数列表和返回类型。每一个参数包括参数序号,参数类型以及参数名。 Thrift 是对 IDL(Interface Definition Language) 描述性语言的一种详细实现。

    3、主动生成java代码

    将Hello.thrift文件和thrift-0.9.0.exe放置到相同目录下,即D:\Thrift,运行cmd,打开窗口命令行,定位到D:\Thrift

    执行命令:

D:\Thrift>thrift-0.9.0.exe -gen java Hello.thrift

    此时会在D:\Thrift下生成一个目录gen-java,里面有Hello.java

    4、创建Java工程

    打开Eclipse或者Myeclipse,创建一个Java工程:Hello,导入刚才生成的Hello.java文件,同时新建一个自在文件夹,Thrift工程需要的jar包以及libthrift-0.9.0.jar放置到文件夹下,同时在Java Build Path中添加引用。

    5、编写接口

import org.apache.thrift.TException;
public class HelloServiceImpl implements Hello.Iface{public boolean helloBoolean(boolean para) throws TException{return para;}public int helloInt(int para) throws TException{try {Thread.sleep(20000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return para;}public String helloNull() throws TException{return null;}public String helloString(String para) throws TException{return para;}public void helloVoid() throws TException{System.out.println("Hello World!");}}

    接口实现Thrift定义文件中的服务。

    6、编写服务器端

每日一道理
只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;public class HelloServiceServer {/*** 启动thrift服务器* @param args*/public static void main(String[] args) {		try{//设置服务器端口为7911TServerSocket serverTransport = new TServerSocket(7911);//设置协议工厂为TBinaryProtocol.FactoryFactory proFactory = new TBinaryProtocol.Factory();//关联处理器与Hello服务的实现TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());TServer.Args tArgs = new TServer.Args(serverTransport);tArgs.processor(processor);tArgs.protocolFactory(proFactory);//应用TSimpleServerTServer server = new TSimpleServer(tArgs);System.out.println("Start server on port 7911....");server.serve();}catch(TTransportException e){e.printStackTrace();}		/*try{//设置服务器端口为7911TServerSocket serverTransport = new TServerSocket(7911);//设置协议工厂为TBinaryProtocol.FactoryFactory proFactory = new TBinaryProtocol.Factory();//关联处理器与Hello服务的实现TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());Args tArgs = new Args(serverTransport);tArgs.processor(processor);tArgs.protocolFactory(proFactory);TServer server = new TThreadPoolServer(tArgs);System.out.println("Start server on port 7911....");server.serve();TServerTransport s = new TServerSocket(11);			}catch(TTransportException e){e.printStackTrace();}*/}}

    7、编写客户端

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 HelloServiceClient {/*** 调用Hello服务* @param args*/public static void main(String[] args) {				try {//设置调用的服务器为本地,端口为7911TTransport transport = new TSocket("localhost", 7911);transport.open();//设置传输协议为TBinaryProtocolTProtocol protocol = new TBinaryProtocol(transport);Hello.Client client = new Hello.Client(protocol);client.helloVoid();transport.close();} catch (TTransportException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

    8、运行

    先运行服务器端,再运行客户端。

    失掉:

Start server on port 7911....
Hello World!

文章结束给大家分享下程序员的一些笑话语录: 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/20/3089725.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器重启导致无法启动MySQL

今天服务器受到DDOS攻击&#xff0c;笔者脑残重启了一下服务器。结果造成MySQL服务器无法启动mysql日志见下图。160803 17:43:47 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data160803 17:43:47 [Note] /application/mysql/bin/mysqld (mysq…

Linux守护进程列表

在linux或者unix操作系统中在系统的引导的时候会开启很多服务&#xff0c;这些服务就叫做守护进程。为了增加灵活性&#xff0c;root可以选择系统开启的模式&#xff0c;这些模式叫做运行级别&#xff0c;每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台…

架构师之DNS实战

架构师 DNS实战 老男孩教育 DNS简介 1. DNS的出现及演化 网络出现的早起是使用IP地址通讯的&#xff0c;那是就几台主机通讯。但是随着接入网络主机的增多&#xff0c;这种数字标识的地址非常不便于记忆&#xff0c;UNIX上就出现了建立一个叫做hosts的文件&#xff08;Linux和W…

打包jar文件后的spring部署及hibernate自动建表经验总结

楔子 用springhibernate做一个服务器运行程序&#xff0c;在部署到服务器时&#xff08;打包成jar&#xff0c;在window server2008下运行&#xff09;&#xff0c;出现了以下两个纠结问题&#xff1a; 1. 加载不了Spring容器 2. hibernate.hbm2ddl.auto 到了服务器不能自动建表…

c语言非线程安全函数引发的BUG一列

公司的机器最近遇到一个bug(其实这个bug一年前就出现过,只是未引起重视),现象是这样的:在生产环境中,用户连续打印票的时候,中间某张票的一个时间可能会出问题,该时间本来是一个未来的时间,却被打印成了系统当前的时间.其他同事认为是传入的参数出错了,加了大量的调试信息和日志…

我是一个线程 [转]

我是一个线程&#xff0c;我一出生就被编了个号&#xff1a;0x3704&#xff0c;然后被领到一个昏暗的屋子里&#xff0c;在这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900 待的时间比较长&#xff0c;他带着沧桑的口气对我说&#xff1a;“我们线程的宿命就是处理包…

自动化运维之–Cobbler

Cobbler 自动化 Cobbler简介 Cobbler是一个快速网络安装linux的服务&#xff0c;而且在经过调整也可以支持网络安装windows。该工具使用python开发&#xff0c;小巧轻便&#xff08;才15k行python代码&#xff09;&#xff0c;使用简单的命令即可完成PXE网络安装环境的配置&…

基于VC++6.0的DLL开发

原文地址&#xff1a;http://blog.163.com/twnhr126/blog/static/78927547200910254346804/ 基于VC6.0的DLL开发 最近在开发一个基于网络的模块&#xff0c;目标是将这个在CAsyncSocket基础上开发的扩展类&#xff0c;进行有效的封装&#xff0c;向应用程序提供模块化的功能&a…

开源jumpserver 堡垒机搭建

一、环境 CentOS 6.x x86_64 mini service iptables stop 关闭SELinux的方法&#xff1a; 修改/etc/selinux/config文件中的SELINUX”” 为 disabled &#xff0c;然后重启。 如果不想重启系统&#xff0c;使用命令setenforce 0 1.指定yum源 wget -O /etc/yum.repos.d/e…

Standard Driver Routines(标准驱动程序)

标准驱动程序 This section describes the required and optional routines that you must implement in your driver to respond to calls from Windows or other drivers. 本节介绍当驱动被Windows或其它驱动程序调用时&#xff0c;为了做出适当的回应&#xff0c;你的驱动必…

Shell 变量及函数讲解 [2]

Shell 变量的输入 Shell变量除了可以直接赋值或脚本传参外&#xff0c;还可以使用read命令从标准输入获得&#xff0c;read为bash内置命令&#xff0c;可以通过help read查看帮助【语法格式】read [参数] [变量名]【常用参数】-p prompt&#xff1a;设置提示信息-t timeout&…

python实例化次数怎么算,我需要一个Python类来跟踪它被实例化的次数

I need a class that works like this:>>> aFoo()>>> bFoo()>>> cFoo()>>> c.i3Here is my try:class Foo(object):i 0def __init__(self):Foo.i 1It works as required, but I wonder if there is a more pythonic way to do it.解决方…

多个域名要选择合适的SSL证书

一般来讲&#xff0c;一个网站&#xff08;一个域名&#xff09;对应一个SSL证书&#xff0c;因为SSL证书是绑定域名的。只有通配符证书和UCC多域名证书才支持多个域名。通配符证书适用于同一个域名下的多个子域。如同一服务器有多个网站&#xff1a;www.domain.comlogin.domai…

java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解

其实&#xff0c;ERP和MES在制造操作中扮演着独立而又互补的角色。ERP能将企业所有方面的数据进行实时、可用的全面集成&#xff0c;为管理决策提供高效、准确的业务决策支持;MES则能加强MRP计划的执行&#xff0c;把MRP计划同车间作业现场控制通过执行系统联系起来。这些“现场…

监控体系 [精]

监控体系 zabbix 监控对象&#xff1a;     1. 监控对象的理解&#xff1a;CPU是怎么工作的&#xff0c;原理     2. 监控对象的指标&#xff1a;CPU使用率 CPU负载 CPU个数 上下文切换     3. 确定性能基准线&#xff1a;怎么样才算故障&#xff1f;CPU负载多…

SD卡启动盘制作软件

下载地址&#xff1a;http://www.roadkil.net/program.php?ProgramID24转载于:https://www.cnblogs.com/wangf/archive/2013/06/04/3116882.html

vs 设置起始页不见了_发朋友圈屏蔽爸妈,结果不小心设置成了仅家人可见...场面一发不可收拾哈哈哈哈!...

一提到爸妈的朋友圈&#xff0c;就会想到养生鸡汤&#xff0c;中老年流量谣言&#xff0c;土味表情包而出于保护个人隐私拒绝被爸妈误解而遭受灵魂拷问的考虑很多人选择了两全其美的分组法给家人看到阳光可爱正能量的一面沙雕的一面只展现给沙雕网友们可如果不小心把屏蔽的内容…

KVM 安装

KVM介绍 Kernel-based Virtual Machine的简称&#xff0c;是一个开源的系统虚拟化模块&#xff0c;自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理&#xff0c;所以相对于Xen&#xff0c;其核心源码很少。KVM目前已成为学术界的主流VMM之…

彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人

随着人工智能的发展&#xff0c;越来越多的机器人出现在我们的日常生活中&#xff0c;用于电话营销公司的自动打电话机器人、快递公司用来送快递的机器人、餐厅里用来上菜的机器人&#xff0c;最近更是有一款会后空翻的机器人。机器人正活跃在各行各业中&#xff0c;代替人类去…

接触的第二个引擎 scaleform

最近在研究 一个全新的 引擎 scaleform 一个 基于 Flash 的 优化的一个引擎 这个引擎之前只有 U3D 和 UDK 两个 版本的工具 去年 改引擎 发布了 mobile 的 SDK 这个引擎有一个 很强大的地方就是 对 Flash 中矢量图的 优化 这个引擎配备了相对完备的 说明文档 (c2d相当于没有) 缺…