当前位置:首页 » 今日头条 » 正文

分类页和文章页“当前位置”下方广告(PC版)
分类页和文章页“当前位置”下方广告(移动版)

车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表

309 人参与  2019年05月18日 16:29  分类:今日头条  评论:0  
  移步手机端

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章

什么是thrift?

简略来说,是Facebook发布的一款开源跨言语的RPC结构.

那么问题来了.

什么是RPC结构?

RPC全称为Remote Procedure Call,意为远程进程调用.

假设有两台服务器A,B.A服务器上布置着一个运用a,B服务器上布置着小白菜一个运用b,现在a期望能够调用b运用的某个函数(办法),可是二者不在同一个进程内,不能直接调用,就需求经过网络传输,在AB服务器之间建一条网络传输通道,a把参数传过去,b接纳到参数调用自己的办法,得到成果,再经过网络传回给a,简略讲便是A经过网络来调用B的进程.这个进程要触及的东西许多,比方多线程,Socket,序列化反序列化,网络I/O,很杂乱,所以牛掰的程序员把这些封装起来做成一套结构,供我们运用,便是RPC结构.

thrift的跨言语特型

thrift经过一个中心言语IDL(接口界说言语)来界说RPC的数据类型和接口,这些内容写在以.thrift结束的文件中,然后经过特别的编译器来生成不同言语的代码,以满意不同需求的开发者,比方java开发者,就能够生成java代码,c++开发者能够生成c++代码,生成的代码中不光包含目标言语的接口界说,办法,数据类型,还包含有RPC协议层和传输层的完成代码.

thrift的协议栈结构

thrift是一种c/s的架构体系.在最上层是用户自行完成的事务逻辑代码.第二层是由thrift编译器主动生成的代码,首要用于结构化数据的解析,发送和接纳。TServer首要任务是高效的承受客户端恳求,并将恳求转发给Pr车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表ocessor处理。Processor担任对客户端的恳求做出呼应,包含RPC恳求转发,调用参数解析和用户逻辑调用,返回值写回等处理。从TProtocol以下部分是thirft的传输协腾讯主页议和底层I/O通讯。TProtocol是用于数据类型解析的,将结构化数据转化为字节省给TTransp张天雄ort进行传输。TTransport是与底层互不相师数据传输密切相关的传输层,担任以字节省办法接纳和发送消12366息体,不重视是什么数据类型。底层IO担任实践的数据传输,包含socket、文件和紧缩数据流等。

MAC OS下thrift的下载与装置

我的电脑是mac,第一次装置也碰到了一些问题,所以有必要记载一下.

首要,在官网下载装置包http://thrift.apache.org/download 现在官网是0.10.0版别.下载完之后解压到想要装置的目录.

进入根目车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表录:

step1:cd thrift-0.10.0
step2:./configure
step3:make
step4:make insta曾达明ll

装置的时分,第二步呈现了问题,提示:

Bison version 2.5 or higher must be installed on the system!

原因是Bison版别过低,mac默许装置的版别是2.3,因而需求装置最新版的Bison,命令行输入:brwakeew install bison装置最新版bison,假如你的命令行反应:Command not found,很可能是因为你没装homebrew,命令行输入:

ruby -e "$(curl -fsS应崇江L https://raw.githubusercontent.com/Hom大通d90ebrew/install/master/install)"

等候装置完homebrew就能够装置bison了,最新版别3.0.4安pk绝版皇室美男团装完今后,履行第二步,发现仍然提示上面那个正告,原因是因为它读取的仍然是默许的bison,所以找到体系装置的bison目录,我的mac是

/Library/Developer/CommandLineTools/usr/bin/bison,解决办法也比较简略,能够先将这个目录下的bison姓名改一下,再将最新版的bison仿制进来,所以,在bin目录下,履行命令:

sudo mv bison bison111

sudo cp /usr/local/opt/bison华夏航空/bin/bison /Library/Developer/CommandLineTools/usr/bin/

现在,再按照上面的过程进行下去,就能够正确装置thrift了.

进入thrift大门的第一个java小实例

1,创立一个服务Hello,创立文件Hello.thrift,代码如下:

namespace java service.demo
service Hello{
string helloString(1:string para)
}

这儿界说了一个名为helloString的办法,入参和返回值都是一个string类型的参数.

2,终端进入Hello.thrift地点目录,履行命令:

thrift -r -gen java Hello.thrift

发现在当时目录下多了一个gen-java的目录,里边的有一个Hello.java的文件.这个java文件包含Hello服务的接口界说Hello.Iface,以及服务调用的底层通讯细节,包含客户端的调用逻辑Hello.Client以及服务端的处理逻辑Hello.Processor,

3,创立一个Maven办理的Java项目,pom.xml中增加相关的依靠,并将Hello.java文件仿制到项目中:

 
org.apache.thrift
libthrift
0.10.0


org.slf4j
slf4j-log4j12
1.7.5

4,创立HelloServiceImpl完成Hello.Iface接口:

package service.demo;
import org.apache.thrift.TExcepti科罗娜on;
public class HelloServiceImpl implements Hello.Iface {
public String helloString(String para) throws TExceptsyncion {
return "result:"+para;
}
}

5,创立服务端完成代码HelloServiceServer,把HelloServiceImpl作为一个详细的处理器传递给Thrift服务器:

package service.demo;
impor车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表t 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 org.apache.thrift.transport.TTransportException;
public class HelloS育儿常识erviceServer {
/**
* 发动thrift服务器
* @param args
*/
public static void main(String[] args) {
try 专升本和本科的差异{
System.out.println("服务端敞开....");
TProcessor tprocessor = new Hello.Processor(new HelloServiceImpl());
// 简略的单线程服务模型
TServerSocket serverTransport = new TServerSocket(9898)蒙眼射苹果;
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.protocol车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表Factory(new TBinaryProtocol.Factory());
TServer server特茨翁 = new TSimpleServer(tArgs);
server.serve();
}catch (TTransportExc车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表eption e) {
e.printStackTrace();
}
}
}

6,创立客户端完成代码HelloServiceClient,调用Hello.clien神仙t拜访服务端的逻辑完成:

package service.demo;
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 {
public static void main(String[] args) {
System.out.println("客户端強がる发动....");
TTransport transport = null;
try {
tra车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表nsport = new TSocket("localhost", 9898, 30000);
// 协议要和服务端共同
TProtocol protocol = new TBinaryProtocol车厘子,Facebook开源跨言语的RPC结构thrift,拼音字母表(transport);
Hello.Client client = new Hello.Client(protocol);
transport.open();
String result = client.helloString("哈哈");
System.out.println(result);
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
}

悉数作业完成后,下面来测验一下,先履行服务端main办法,在履行客户端main办法,会在客户端控制台打印出:result:哈哈.

转载请保留出处和链接!

本文链接:http://www.mulujidi.com/articles/207.html

文章底部广告(PC版)
文章底部广告(移动版)
百度分享获取地址:http://share.baidu.com/
百度推荐获取地址:http://tuijian.baidu.com/,百度推荐可能会有一些未知的问题,使用中有任何问题请直接联系百度官方客服!
评论框上方广告(PC版)
评论框上方广告(移动版)
推荐阅读