Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是)

简介:

中间语言是我为thrift语言起的名字,呵呵,为什么叫它中间语言呢,其实意思很简单,就是说,它只是一个过程,而不是一个最终的结果,而结果需要这个中间过程的影响,没有中间语言,结果语言也不能产生,在thrift架构中,如果你希望产生一个为C语言提供的接口,那么,你需要先书写thrift是间语言,然后,需要thrift程序将它编译成c语言的格式才行,这是正常的,“只有它什么都不是,它才有可能什么都是”,呵呵。

thrift中的数据类型

下面是thrift本身对类型的重定义,看一下:

 bool        Boolean, one byte
 byte        Signed byte
 i16         Signed 16-bit integer
 i32         Signed 32-bit integer
 i64         Signed 64-bit integer
 double      64-bit floating point value
 string      String
 binary      Blob (byte array)
 map<t1,t2>  Map from one type to another
 list<t1>    Ordered list of one type
 set<t1>     Set of unique elements of one type

通过上面的说明,我们可以看出,thrift里面有的是各种语言公有的类型,而一些个别语言中才出现的东西,如dictionary,hash等并没有在thrift中出现,这是正常的,对于一种公用语言来说,它不应该包括那些特殊的东西,而它可以为那些特殊的东西建立一个自己的标准,让自己去适应它们,如thrift里的map<t1,t2>类型相当于CSharp里的Dictionary<t1,t2>字典类型,这些在生成目标语言之后,都可以进行验证。

thrift中没有类,但有结构体

我想,这应该是对C语言的一种照顾,在thrift中没有出现class(类)的概念,而有值类型struct,实事上,对于结构的认识我们一直都有偏见,让为某些高级语言里有了类,就不应该有结构了,还说自己的代码中从来没有出现过结构。在这里,我需要对这位同学说,你的代码里之所以没有结构,完成是因为你对这种数据类型的不理解,不深入引起的,对于业务简单,或者没有业务的对象来说,为了将属性进行封装,完成可以使用结构来实现,看看C语言你就知道结构有多重要了,呵呵。

枚举:

enum Operation {
  ADD = 1,
  SUBTRACT = 2,
  MULTIPLY = 3,
  DIVIDE = 4
}

结构(结构体)

struct DataSync{
1:bool IsSync,/*是否要同步*/
2:string FilePath,/*文件路径*/
3:i64 CurrentSeek,/*当前针*/
}

异常

exception InvalidOperation {
  1: i32 what,
  2: string why
}

服务,我们的接口定义在服务中,接口是客户端与服务器端通讯的基础,客户端使用自己语言的接口与服务器端通讯,客户端与服务器端的平台,开发环境可以完全不同,只要知识服务端的IP和端口即可实现通讯,这就是across language的thrift的魅力!

service FileTransport{
bool Upload(1:DataSegment dataSegment),/*客户端传入一个byte数组,服务器返回是否上传成功,desPath表示上传后存储的路径*/
binary Download(1:string fileUrl),/*客户端传入一个URL,服务器返回这个URL指向的文件,并为byte数组的形式返回*/
DataSync IsSync(1:string fileName),/*檢測文件是否需要進行同步上傳*/
bool UpdateDataSync(1:DataSync dataSync)/*從數據庫中更新数据同步状态,主键为文件完整名称*/
}

当我们运行thrift命令去生成目标代码后,在指定的gen文件夹中生成,例如生成csharp的代码,它会在thrift同级目录中建立一个gen-csharp文件夹,然后代码生成会以结构,枚举,服务为单位去生成多个文件。如图:

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是),如需转载请自行联系原博主。

目录
相关文章
|
12天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
105 53
|
9天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
10天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
29天前
|
Cloud Native Go API
Go语言在微服务架构中的创新应用与实践
本文深入探讨了Go语言在构建高效、可扩展的微服务架构中的应用。Go语言以其轻量级协程(goroutine)和强大的并发处理能力,成为微服务开发的首选语言之一。通过实际案例分析,本文展示了如何利用Go语言的特性优化微服务的设计与实现,提高系统的响应速度和稳定性。文章还讨论了Go语言在微服务生态中的角色,以及面临的挑战和未来发展趋势。
|
30天前
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。
|
1月前
|
负载均衡 Go API
探索Go语言在微服务架构中的应用与优势
在这篇技术性文章中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构时的独特优势。文章将通过对比分析Go语言与其他主流编程语言,展示Go在并发处理、性能优化、以及开发效率上的优势。同时,我们将通过一个实际的微服务案例,详细说明如何利用Go语言构建高效、可扩展的微服务系统。
|
1月前
|
安全 Go 云计算
探索Go语言在微服务架构中的应用与优势
在本文中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构中的独特优势。文章将分析Go语言的并发模型、简洁的语法以及高效的编译速度,以及这些特性如何使其成为微服务架构的理想选择。我们将通过一个简单的微服务示例,展示Go语言在实际开发中的表现,并讨论其在性能和可维护性方面的优势。
|
1月前
|
前端开发 中间件 Go
实践Golang语言N层应用架构
【10月更文挑战第2天】本文介绍了如何在Go语言中使用Gin框架实现N层体系结构,借鉴了J2EE平台的多层分布式应用程序模型。文章首先概述了N层体系结构的基本概念,接着详细列出了Go语言中对应的构件名称,包括前端框架(如Vue.js、React)、Gin的处理函数和中间件、依赖注入和配置管理、会话管理和ORM库(如gorm或ent)。最后,提供了具体的代码示例,展示了如何实现HTTP请求处理、会话管理和数据库操作。
31 0
|
1月前
|
消息中间件 监控 Go
Go语言在微服务架构中的优势与实践
【10月更文挑战第10天】Go语言在微服务架构中的优势与实践
|
1月前
|
Java Go 数据库
Go语言在微服务架构中的优势与实践
【10月更文挑战第10天】Go语言在微服务架构中的优势与实践