Thrift 使用简介

作为 多种语言 rpc 通信的王者,Thrift无疑是最为突出的,尤其在现在讲究 微服务 中,前后端分离的思想,现在常用的前后端分离的语言搭配经常是这样的。

后端    java  前端  nodejs

后端  java 前端  swift【ios】

后端  java  前端  python

后端 golang  前端 nodejs

后端 golang  前端  php

后端 scala 前端  nodejs

后端 c# 前端  nodejs

可以看到八大语言 几乎全部可以通过Thrift 支持 多种语言RPC通信

今天首先使用  mac 通过实例安装 Thrift 并运行Thrift实例,实现了 java 与 python 与nodejs 的Rpc通信 及其自己语言server和client对调。

1.mac 安装 Thrift

使用 homebrew  安装  Thrift 0.10.0

在Terminal 中  brew install  thrift

如果安装成功后 ,输入 thrift  会有相关输出

2.创建一个 后缀为 .thrift 的文件,比如  user.thrift

编写thrift文件内容,主要是两大块 ,struct 结构类似 java bean,service 结构类似 java 的接口 interface,在struct中 写字段,需要在字段前 写 index:   ,例如 1:i32 age, 2:bool gender,在service中写方法的声明,不许写方法体。

写完后点击保存,然后 编译 thrift文件生成 对应的 语言 代码,从Terminal 进入到thrift 的目录 ,比如 我们服务端是使用java ,客户端使用nodejs 和 python  移动端 swift ,那我们需要生成 java 和nodejs python  swift  的代码。命令如下:

thrift  --gen java user.thrift    #生成java 代码,在 gen-java 目录中

thrift --gen js:node user.thrift # 生成 nodejs 代码 在 gen-node 目录中

thrift --gen py user.thrift # 生成 python 代码  在 gen-py 目录中


新建 java maven 服务端项目,首先需要引入 thrift jar 包依赖,然后将  gen-java目录中的java 文件 复制粘贴到  该java 服务项目中,创建thrift service 的实现类,并实现重写 Iface中的 其声明的方法,并编写  socket server 类,之后使用 java Application 运行 该socket server 类 main()方法,监听 客户端请求。

新建 nodejs express 客户端项目, 首先 nodejs 需要安装 thrift ,

sudo npm  -g -dev  install  thrift

将thrift 编译生成的gen-node 中的js 代码 全部复制粘贴到  nodejs客户端项目中。引入 thrift 依赖 ,调用thrift 相关接口,实现客户端调用,nodejs   在回调时 的数据在解析 会遇到一些小小的问题,出现 【object promise】等于是半成品,需要下功夫修改。


新建  python 项目 客户端,首先  python 也需要安装 thrift ,我使用 python 3.5

sudo pip  install  thrift

将之前 thrift文件生成的gen-py目录下的文件复制粘贴到 python 客户端项目中,引入thrift 依赖,调用 thrift 相关接口,实现客户端调用,python 3.5 由于不兼容 python 2.*版本 在这里调试会修改一些代码 ,另外 调用本地 gen-py 包  在pycharm 会标红线,但是不影响使用。

其中 需要注意的就是 thrift文件 的service 中方法的定义一定要清晰明确,struct的字段也类似,否则如果有 接口的修改,就需要 更新thrift文件,重新生成 对应的语言代码,还是非常容易引起冲突 出错。

thrift 的 相关组件  需要深入了解  Transport  ServerSocket   Protocol   Process  Sever ,只有了解他们的具体使用原理才可以灵活运用

相关的代码 ,会在之后整理 上传到 github中

你可能感兴趣的:(Thrift 使用简介)