热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RPC框架Thrif数据类型

Thrift类型系统允许程序员尽可能使用本机类型,无论它们使用什么编程语言。此信息基于并取代位于Thrift白皮书中的信息。ThriftIDL为每个目标语言生成代码的类型提供了描述。一、基本数据类

Thrift类型系统允许程序员尽可能使用本机类型,无论它们使用什么编程语言。此信息基于并取代位于Thrift白皮书中的信息。 Thrift IDL为每个目标语言生成代码的类型提供了描述。

一、基本数据类型

选择基本数据类型是为了简单和清晰,关注所有编程语言中都有的关键类型

·        bool: 布尔型(true or false)

·        byte: 字节,8位符号整型

·        i16: 16位符号整型

·        i32: 32位符号整型

·        i64: 64位符号整型

·        double: 64位浮点数

·        string: UTF-8编码的字符串

备注:这里没有无符号整型,那是因为在许多编程语言中没有无符号整型。


二、特殊类型

binary: 没有编码的字节序列

备注:这是字符串类型的特殊形式,增加这个类型是为了同java更好的互操作。目前的计划是在某种程度上将其提升为基础类型。


三、结构Structs

Thrift中的Structs定义了通用的对象,它基本上等同于OOP语言中的类,但是没有继承功能。一个struct有一组强类型的字段,每一个字段由唯一的名字标识。字段可以有各种注释,如数字字段IDs、可选默认值等,这些在Thrift IDL里面有描述。


四、容易Containers

Thrift的容器是强类型的容器,映射成各种编程语言中的可用容器。

有三种容器类型:

·        list: 元素的有序列表,转换为STL的vector,Java的ArrayList,脚本语言的本地舒展等等。

·        set: 唯一元素的无序列表。转换成STL的set,Java的HashSet,Python的set,等等。PHP不支持set,因此会被转换为相似的List。

·        map: 唯一键、值匹配。转换为STL的map,Java的HashMap,PHP的associative array,Python的Dictionary,等等。虽然提供了默认值,但是类型映射没有被明确的修改,添加了自定义代码生成指令,允许替换目标成目标语言中的自定义类型。

容器的类型可以是任何合法的Thrift类型。

备注:为了最大限度的兼容,map的键类型应该为基本数据类型,而不应该是struct或container类型。有些语言不支持复杂的键类型。另外,JSON协议只支持键类型为基本数据类型。


五、异常Exceptions

异常在功能上等同于Structs,除了它们从本地异常基类继承外,以便与任何语言的本地异常平滑的集成。


六、服务Services

服务使用Thrift的类型定义,服务的定义在语义上等同于面向对象语言的接口定义(或纯虚类的定义)。Thrift编译器生成实现了接口的完全功能的客户端和服务器庄。

一个服务是一组命名函数的集合,每一个函数有参数列表和返回值。

备注:除了其他定义的Thrift类型外,void作为函数返回值是合法的。另外,oneway修饰符必须添加到void函数,这样生成的代码就不会等待返回。注意,纯void函数将返回一个回应给客户端以表面服务器上的操作已经完成。有oneway修饰符的方法,只能表明请求在传输层上成功传输,oneway方法在服务端可能同时执行,且执行的顺序也可能不一样。





推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
author-avatar
mobiledu2502917243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有