Thrift前端上手实例

项目介绍

项目地址

这个项目用来帮助那些对thrift感兴趣的前端们上手thrift, 你可以把它认为是一个简易的使用案例或是指南, 毕竟thrift的官方文档真的很简单...

为什么使用Thrift

Thrift是一种接口描述语言和二进制通讯协议, 可以用来进行服务端与服务端的通信。 与http相比他有很多优点:

  • 跨语言,自动生成不同语言的接口代码,这在开发中用处很大,可以使你在联调之前就确保传输的参数类型和字段没有问题,大大减少bug出现率。
  • 与HTTP相比更加紧凑,但同时可扩展性也很强,支持加密、非阻塞、异步等功能。
  • 数据传输效率高,负载低,支持多种序列化技术。

一些劣势:

  • 接口代码根据IDL自动生成,当数据结构变化时,需重新编辑IDL文件,生成代码。( 这一点可以通过写脚本解决这个问题 )
  • 社区和技术文档很不全面。

以上都是一些在哪都能查得到的优劣对比...

其实当前端业务越来越复杂, 后端所提供的服务不管是数量还是种类都越来越多, RPC协议的重要性才会凸显出来, 因为一个前端应用需要调用各种服务, 需要一个中间层来做不同服务的整合, 中间层与真正后端的通信使用像Thrift这样的RPC协议就再合适不过了。 其实项目架构中的图主要就解释了这一点。( 如果有读者对这个不是很了解可以阅读一下我的这篇 日记

注意 : 这个项目主要是为前端们提供上手帮助而非细节讲解。

项目架构

以我对thrift一些浅薄的理解,它的应用整体架构因该是如下图所示的:

主要的文件结构

-|
 |- client                 // 前端
 |                          
 |- middle                 // 中间层
 |  
 |- server                 // 真正的后端
 |
 |- thrift -|              // 存放与thrift相关文件的文件夹
            |
            |- gen-nodejs  // 存放.js文件的文件夹
            |
            |- .thrift     // 存放.thrift文件的文件夹

 // 注意:
 这个项目使用node作为服务端的开发语言,  
 部分代码衍生自官网的实例,  
 但是它比官网的代码更加完整,  
 可以让你了解thrift的完整使用流程。

将会被用到的前端框架或前端库以及使用原因:

  • 客户端 : vue 使用原因 : 尝试一下而已,但是使用vue-cli构建项目真的很方便,对vue不熟悉的渎职只需关注 @client/src/App.vue 中的代码即可;
  • 中间层 : koa做router处理, thrift连接真正的后端 使用原因 : 因为它是一个真的很轻量的nodejs库,作为demo真的是再适合不过了;
  • 服务端 : thrift 使用原因 : 通常的,这里会使用java等一些稳定高效的后端语言,但是为了方便前端们的阅读也为了方便编写,这里还是使用node.

如何使用

  • 首先你需要通过 npm run server 启动服务端的服务;
  • 接下来你需要通过 npm run middle 启动中间层的服务;
  • 最后你需要 cd client 进入client文件夹,并执行 npm run dev 来启动客户端;
  • 当你在客户端出发事件,你将看到从服务端传回的数据,追踪数据的流向,你将明白thrift的使用方式。

数据流向图:

最后

文章内容是个人的一些理解,如果阅读的同学觉得有问题可以及时的与我沟通。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

3种方式提升云可扩展性

在亚马逊云服务中部署被盛赞为是一个很好的方式来实现高扩展性并且你只需要支付你所使用的云计算机性能即可。那么,如何从这项技术中获得最佳的扩展性呢?

26770
来自专栏数据库新发现

Sun Cluster工作原理介绍(转)

本章的结构安排是以介绍Sun Cluster中重要的概念为主线。相关的工作原理分布在各个概念的介绍之中。     quorum的概念在分布式系统中经常被用到。...

9530
来自专栏张善友的专栏

持续集成及部署利器:Go

Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发。(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是Tho...

31450
来自专栏程序你好

消息通知子系统用户需求

25340
来自专栏喵了个咪的博客空间

phalapi-进阶篇1(Api,Domain,和Model)

#phalapi-进阶篇1(Api,Domain,和Model)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个...

38970
来自专栏逸鹏说道

大公司都有哪些开源项目之新浪

新浪:WeiBo https://github.com/weibocom 1.分布式缓存服务器 memcachedb memcachedb是 一个由新浪网的开发...

390100
来自专栏JavaQ

分布式事务入门篇

本地事务 本地事务,即单体应用中单个线程内对一个数据库的事务提交。例如充值操作,充值成功后订单表状态更新为成功,账户表加钱,对应的数据库更新操作如下。 begi...

40260
来自专栏王清培的专栏

后端服务性能压测实践

后端服务性能压测实践 标签(空格分隔): 性能 压测 后端服务 压测实践 作者:王清培(Plen wang) 背景 环境检测 压力机及压力工具检测 Linux...

86090
来自专栏大魏分享(微信公众号:david-share)

互联网架构中的9种隔离术以及容器化的实现

9种隔离术 在硬件方案设计的时候,我们常提到过一个概念“故障域”。故障域指的是当一个区域出现故障以后,它的受影响范围。例如在设计双活数据中心的时候,我们要设置故...

70840
来自专栏张善友的专栏

为首次部署MongoDB做好准备:容量计划和监控

如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了...

44180

扫码关注云+社区

领取腾讯云代金券