仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 690|回复: 14
打印 上一主题 下一主题

[其他Linux] Linux设计Linux年夜棚版Thrift进门教程仓酷云

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
看不懂man文档的人.在linux中,命令可分为系统基本命令和应用程序命令.系统基本命令是所有的unix类系统都支持的命令,走到哪都不变,只要是unix类系统上就肯定有.
【引子】
在英语里,thrift是个名词,暗示的是“俭仆、勤俭”,给个例句会印象更深些:
Farmersknowalotaboutvalueandthrift。(译:农场主深谙代价与俭仆之道。)
但是,这篇文章并不是是一篇英语进修教程,而是要和人人先容盘算机手艺里一款出名的通讯框架–thrift框架。
好,如今有请thrift退场。
【thrift是甚么】
thrift的全名叫做Apachethrift,是一款软件开辟RPC框架,能够很高效地完成跨言语的RPC服务。
假如你还不懂得RPC是甚么,从速看看这里。
假如想观光观光thrift的官方网站,请点击这里。
【thrift生于何地】
thrift最后生于Facebook,并健壮发展,在2007年由Facebook正式开源出来,2008年由Apache软件基金会入手下手卖力项目孵化直至昔日。
【另有哪些RPC框架】
protobuf、Avro、MessagePack等,假如你有乐趣,能够搜刮一下他们,也有益于你更好的懂得RPC这个范畴的开展情形。
【下载thrift】
今朝的最新版本是thrift-0.9.1
【安装thrift】
起首倡议你安装以下这些软件包:
  1. automakelibtoolflexbisonpkgconfiggcc-c++boost-devellibevent-develzlib-develpython-develruby-devel
复制代码
然后从官网下载thrift源码包,并举行编译链接:
  1. ./configure–-prefix=/your/program/path/--enable-libtool-lockmakemakeinstall
复制代码
安装完成后,你会看到thrift实在包括了三部分:一个bin程序、一坨头文件和多少库文件


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

#小常识ls利用-F选项的话,文件列表中会用标记暗示文件属性,
#如*暗示可实行文件,@暗示软毗连,/暗示文件夹
[rocrocket@li218-69thrift]$ls-1Fbin
thrift*
[rocrocket@li218-69thrift]$ls-1Flib
libthrift-0.9.1.so*
libthrift.a
libthrift.la*
libthriftnb-0.9.1.so*
libthriftnb.a
libthriftnb.la*
libthriftnb.so@
libthrift.so@
libthriftz-0.9.1.so*
libthriftz.a
libthriftz.la*
libthriftz.so@
pkgconfig/
[rocrocket@li218-69thrift]$ls-1Finclude/thrift/
async/
concurrency/
config.h
cxxfunctional.h
processor/
protocol/
qt/
server/
TApplicationException.h
TDispatchProcessor.h
thrift-config.h
Thrift.h
TLogging.h
TProcessor.h
transport/
TReflectionLocal.h



【为何必要thrift】
假如你之前没有打仗过RPC框架的话,大概了解起来会对照坚苦。为了照应这些新用户的感觉,我实验着用一种好了解的思绪来注释:
研发工程师小吴接到了一个新义务,给“托福测验成就数据库”增添一个“成就查询”的功效,客户端供应“用户ID”向服务器端倡议查询哀求,服务器端接到查询哀求后从数据库中取回此用户ID对应的姓名和成就,并前往给客户端。
就是如许一个复杂的Client-Server通讯历程,实在就构成了一个典范的RPC场景。服务器端供应“成就查询服务”,客户端会经由过程商定的办法来查询成就。
小吴计划的办法挪用和数据传输是如许的:

<br>
thriftexample

经由过程上图能够看到,服务器端处于监听形态(守候哀求的到来),客户端倡议一个名为Search的举措,参数是用户ID,而这个举措的前往是一个布局体structUserGradeInfo,个中包括了用户的名字(UserName)和用户的成就(UserGrade)。
计划做完了,小吴要入手下手编码了。假如依照“手事情坊”的思绪,小吴最少必要完成以下几个方面:
(1)“客户端向服务器端发送数据”的代码
(2)“客户端吸收服务器端查询了局”的代码
(3)“服务器端吸收客户端数据”的代码
(4)“服务器端向客户端发送查询了局”的代码
(5)假如客户端会多量量倡议查询,那大概还必要思索改成多线程模子或异步模子
(6)并且另有大概由于某种缘故原由,请求客户端和服务器端利用分歧的言语举行开辟
照此思绪,小吴最少要3周工夫来开辟和自测。(工夫很长,对吧)
但,自从thrift呈现后(更正确的说,是自从RPC开辟框架呈现后),上述事情量被年夜年夜简化了。我们只需挪用一个thrift工具就能够主动天生上述的一切代码,即使服务器端和客户端利用分歧的言语,thrift也还是撑持。
至此,我信任你应当也许了解thrift能帮我们做甚么了吧。
【thrift究竟怎样用】
仍然拿下面的“成就数据库”的例子来讲,thrift的利用能够被分为四步:
第1步:明白要交互的数据格局(如上例中的UserGradeInfo)和详细的办法(如上例中的Search),界说出thrift接口形貌文件(英文叫做IntefaceDescriptionFile);
第2步:挪用thrift工具,根据thrift接口文件,天生RPC代码;
第3步:你的服务器端程序援用thrift天生的RPC代码,并完成个中的Search举措的逻辑,然后启动监听,守候客户端发来哀求。
第4步:客户端一样引进并挪用RPC代码来与服务器端通讯;
(假如你以为如许形貌太充实,别急,稍后会有完全的例子)
【thrift接口形貌文件怎样编写】
假如你是学院派,那末我保举你研讨thriftIDL(InterfaceDefinitionLanguage)标准,在这里。固然有些流畅,但你能够从中懂得到一个接口文件能够怎样来写。
在编写接口文件时,必要对你要传输的数据设定命据范例,好比UserName是字符串型,UserGrade是整型等。由于thrift是撑持浩瀚开辟言语的,以是thrift供应了一套本人的数据范例编写标准,只要用这套自力于任何言语的范例标准来编写接口文件,thrift才干把它转换成你指定的那种开辟言语的代码。
thrift中的范例包含基本范例、布局、容器、非常、服务等几个部分。(官网中有专门先容数据范例的页面,在这里)
【范例之基本范例】
基本范例,实在十分复杂和明白:
(1)bool:布尔范例(true或false)
(2)byte:8位有标记整数
(3)i16:16位有标记整数
(4)i32:32位有标记整数
(5)i64:64位有标记整数
(6)double:64位浮点数
(7)string:文本字符串,利用UTF-8编码
(有些仔细的同砚会扣问“为何不撑持无标记整数范例呢?”,这是由于在良多开辟言语中并没有原生的无标记整型。)
【范例之容器】
thrift容器包含了各类言语中最经常使用的容器,共三种:
(1)list容器:一个元素可反复的有序列表。会被转换成C++中的vector,Java中的ArrayList,剧本言语中的数组等。
(2)set容器:一个元素不成反复的无序汇合。会转换成C++中的set,Java中的HashSet、Python中的Set等。(熟习PHP的同砚大概会问“PHP其实不撑持set范例,怎样办”,在PHP言语中,thrift会将set容器转换成List。)
(3)map容器:一个含有多个key:value键值对的布局。会被转换成C++中的map,Java中的HashMap,PHP中的联系关系数组,Python/Ruby中的dictionary等。
关于上述三种容器,其元素的范例准绳上能够是任何一种thrift范例。可是值得注重的是,map的key范例必要是基本范例,由于良多开辟言语其实不撑持map的key范例为庞大数据范例。
【范例之布局体】
布局体范例,在情势上和C/C++中的布局体范例十分类似,就是一坨范例的组合,好比上文图中的UserGradeInfo即是一个thrift布局体范例。
thrift接口文件中的布局体范例,城市被转换成一个自力的类(Class)。类的属性即是布局体中的各个范例,而类的办法即是对这些范例举行处置的相干函数。
我们来看一个布局体界说的例子:


?
1
2
3
4
5
6
7
8
9


structUserGradeInfo{
1:requiredstringUserName="Anonymous";
2:requiredi16UserGrade=0;
}



能够看到,布局体中每个域都有一个正整数标识符,这个标识符其实不请求一连,但一旦界说,不倡议再举行修正。
别的,每一个域前城市有required或optional的限制,前者暗示是必填域,后者则暗示是可选域。域是能够有默许值的,好比上例中的“Anonymous”和0。
(1)假如一个域设置了required,可是在实践机关布局体时又没有给这个域赋值,那末thrift会以为这是一个非常。
(2)假如一个域设置为optional且在机关布局体时没有给这个域赋值,那末在利用这个布局体时,就会疏忽失落这个optional的域。
【范例之非常】
除利用exception来替换struct之外,“非常”这个范例,在语法上和方才先容过的布局体的用法是完整分歧的。可是从语义上讲,exception和struct却天差地别。exception是在远程挪用产生非常时用来抛出非常用的。
【范例之服务】
服务的界说,与面向对象手艺中界说一个接口很相似,而这些接口实在就是纯虚函数。thrift编译工具会依据服务的界说来发生响应的办法和函数。
每一个服务,都包含了多少个函数,每一个函数包含了多少参数和一个前往值(前往值能够是void)。
(小技能:前往值为void的函数,你能够在函数名前加上oneway标识符,将此函数以异步形式实行,如许在挪用此函数后,函数会当即前往。)
关于前往void的函数,thrift仍旧会确保函数前往,如许就暗示这个函数已被准确实行,且服务器端已有前往信息了。可是假如给void的函数前加上oneway,那末此函数的前往只能暗示数据已进进传输层,其实不能暗示服务器端已收到并前往了数据。
【我们来看一个thrift接口形貌文件的例子吧】


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

#例子-thrift接口形貌文件
#
#编写这个文件是为了教会你怎样写thrift接口形貌文件。
#第一个你应当把握的常识点就是.thrift文件
#撑持shell的正文体例,那就是用#标记。
/**
*我们起首来温习一下thrift的经常使用数据范例,以下所示:
*
*bool布尔型,1个字节
*byte有标记整数,1个字节
<p>
乐观 该用户已被删除
15#
发表于 2015-3-21 00:23:40 | 只看该作者
我想即使Linux高手也很难快速准确精练的回答你。
谁可相欹 该用户已被删除
14#
发表于 2015-3-21 00:23:40 | 只看该作者
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
简单生活 该用户已被删除
13#
发表于 2015-3-14 04:20:51 | 只看该作者
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
深爱那片海 该用户已被删除
12#
发表于 2015-3-7 02:40:31 | 只看该作者
Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
山那边是海 该用户已被删除
11#
发表于 2015-3-6 19:54:48 | 只看该作者
尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-4 03:29:23 | 只看该作者
生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
不帅 该用户已被删除
9#
发表于 2015-2-21 17:52:43 | 只看该作者
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
莫相离 该用户已被删除
8#
发表于 2015-2-19 23:33:32 | 只看该作者
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.
分手快乐 该用户已被删除
7#
发表于 2015-2-7 03:03:06 | 只看该作者
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
因胸联盟 该用户已被删除
6#
发表于 2015-2-6 16:35:40 | 只看该作者
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-5 00:12:57 | 只看该作者
熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。
变相怪杰 该用户已被删除
地板
发表于 2015-2-4 13:15:57 | 只看该作者
感谢老师和同学们在学习上对我的帮助。
小女巫 该用户已被删除
板凳
发表于 2015-1-30 07:22:05 | 只看该作者
我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
admin 该用户已被删除
沙发
发表于 2015-1-20 22:38:28 | 只看该作者
永中office 2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-30 04:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表