双向消息传递的节俭

2024-05-02

我很好奇 Thrift 是否适合我的用例?我正在制作另一个消息系统,其中有客户端和服务器,但客户端和服务器都向对方发起请求消息,并且并非所有消息都可能是请求,而只是通知。

回到 10 年前,我使用手动二进制编解码器完成了这项工作。回到 5 年前,我使用 Google Protocol buffers 再次做到了这一点。但我现在听到更多关于 Thrift 的消息。

Thrift 可以简单地用作编解码器,还是真的围绕请求/回复模式构建?我需要保持与传输无关,因为我将使用自定义消息传递总线、Websockets 和可能的 ZeroMQ。

我还在考虑消息包和协议缓冲区,因为我知道它们确实非常适合非请求/回复消息传递模式。

Thanks.


我只与 Thrift 的 C++ 版本密切合作,所以这个答案是基于此 - 对于其他语言来说可能也是如此,也可能不是。

但根据我的经验,Thrift 相当模块化 - 为您提供了一个完整的堆栈,可以处理 RPC、套接字通信、数据序列化以及基本上介于两者之间的任何内容。

首先在 Thrift IDL 文件中指定数据结构和服务,其方式类似于在类(C++/Java/等中)中指定成员变量(对于数据结构)和成员函数(对于服务) .)。您可以使用 Thrift 编译器编译这些文件以生成特定于语言的源文件,然后可以在应用程序中实现这些文件。

如果您使用完整的堆栈,那么只需创建必要的对象(服务器、协议、传输等)并打开客户端和服务器之间的连接(其中服务器实现 IDL 指定的功能)即可。然后,客户端可以使用自定义数据结构(或只是一些标准 Thrift 数据类型)作为参数和返回值来调用服务器上的函数,就像服务器是本地对象一样。

默认情况下,这些函数是阻塞的,也就是说,它们在返回之前需要服务器的答复。但是,您也可以将函数指定为oneway(只要他们回来void),在这种情况下,您只需发送函数调用,然后立即继续。

然而,这一切仅适用于使用完整 Thrift 堆栈的情况。您通过实例化各种对象(协议、传输、处理程序、服务器等)来创建客户端和服务器,尽管我自己从未尝试过,但我不明白为什么您不应该能够创建一个例如传输的派生实现,然后使用它代替 Thrifts 自己的传输。

如果您只想使用 Thrift 以跨平台方式定义数据结构,您也可以这样做,然后使用 Thrift 序列化这些数据结构(忽略堆栈的其余部分和 RPC 内容),然后将它们发送为通过您自己的传输的二进制数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双向消息传递的节俭 的相关文章

  • thrift介绍及应用(二)—简单应用

    原文 http blog csdn net guxch article details 12162131 六 一个最简单的实例 Thrift文件 demo thirft 来自官网 如下 plain view plain copy struc
  • Thrift快速入门

    文章目录 Thrift的安装 windows下安装 Linux下安装 Thrift的使用 编写IDL文件 命名空间 namespace 基本数据类型 类型定义 typedef 结构体类型 struct 枚举类型 enum 异常类型 exce
  • 在 Thrift IDL 中,如何说客户端应该在结构中包含一组字段中的一个?

    假设我在 Apache Thrift IDL 文件中定义了一个包含两个字段的结构 例如 struct Thing 1 optional string name 2 optional i32 size 这意味着客户端可以提供没有字段 名称 大
  • Thrift - 从简单的 JSON 转换

    我创建了以下 Thrift 对象 struct Student 1 string id 2 string firstName 3 string lastName 现在我想从 JSON 中读取这个对象 根据这个post这个有可能 所以我写了下
  • 循环遍历maven中的特定资源文件生成源

    我使用 maven antrun plugin 从 thrift IDL 生成源代码 我有一个单独的项目 和 jar 来保存这些生成的源 并且这个插件不支持通配符替换 所以我不能说 thrift 我使用执行任务来生成源代码并将它们复制到 s
  • 当 TFramedTransport 打开时,thrift 中的 TNonblockingServer 崩溃

    我一直在尝试用 C 实现一个 Thrift 服务器来与 Python 客户端进行通信 这是我的代码 C 服务器 shared ptr
  • Thrift无法从json反序列化为java对象

    我从以下 thrift 对象生成了一个 java 对象 struct Account 1 required string accountType 2 bool accountActive 我编写了一个java代码 尝试将java对象序列化为
  • Thrift TSimpleServer 在多次成功请求后变得无响应

    我有一个 Thrift API 由在 Linux 上运行的 Java 应用程序提供服务 我正在使用 NET 客户端连接到 API 并执行操作 对该服务的前几次调用工作正常 没有错误 但随后 看似随机 调用将 挂起 如果我强制退出客户端并尝试
  • 运输例外

    我正在尝试导入 happybase 但在连接时收到以下错误消息 我已经运行了 Hadoop 伪节点集群和 Hbase 安装的组件版本如下 Hadoop 版本 1 0 4 Hbase 版本 0 94 4 快乐基地 0 4 有人可以查看下面的例
  • Hbase 客户端因 /hbase 错误导致连接丢失

    我快要疯了 安装了Hadoop Hbase 一切都在运行 opt jdk1 6 0 24 bin jps 23261 ThriftServer 22582 QuorumPeerMain 21969 NameNode 23500 Jps 23
  • 从 erlang 插入 cassandra

    我正在尝试从 Erlang R14B02 通过 thrift 0 6 1 将一些内容插入到 cassandra 0 7 6 中 我正在做以下事情 读取记录定义 rr cassandra types 连接到卡桑德拉 ok C thrift c
  • 使用 thrift json 序列化将对象转换为 JSON 字符串

    我是储蓄新手 我需要将我的数据对象转换为JSON string with Thrift JSON序列化 我用这种方式尝试过 TSerializer serializer new TSerializer new TSimpleJSONProt
  • 如何在 Java 中对 Hive 进行异步调用?

    我想以异步方式在服务器上执行 Hive 查询 Hive 查询可能需要很长时间才能完成 因此我不想阻止调用 我目前正在使用 Thirft 进行阻塞调用 在 client execute 上阻塞 但我还没有看到如何进行非阻塞调用的示例 这是阻止
  • HBase 上的 Thrift 有性能基准吗?

    我有一个可以将大量数据写入 hbase 的系统 系统是用c 编写的 发现hbase有其他语言的thrift接口 我的问题是 HBase 上的 Thrift 有性能基准吗 与java原生api相比 最劣势是什么 我推荐最近关于这个主题的两篇博
  • Haskell Thrift 库在性能测试中比 C++ 慢 300 倍

    我正在构建一个包含两个组件的应用程序 用 Haskell 编写的服务器和用 Qt C 编写的客户端 我正在使用 thrift 来传达它们 我想知道为什么它运行得这么慢 我做了性能测试 这是我机器上的结果 Results C server a
  • thrift:generate-python 在 SBT 中不生成 Python 文件

    I use sbt 节俭 https github com bigtoast sbt thrift 0 6我在构建定义中有以下内容 thriftPythonEnabled true thriftPythonOutputDir lt lt s
  • 双向消息传递的节俭

    我很好奇 Thrift 是否适合我的用例 我正在制作另一个消息系统 其中有客户端和服务器 但客户端和服务器都向对方发起请求消息 并且并非所有消息都可能是请求 而只是通知 回到 10 年前 我使用手动二进制编解码器完成了这项工作 回到 5 年
  • 从 Windows 中的 C++ 应用程序进行 Thrift 调用

    正如标题所示 我有一个用 C 编写的 Windows 应用程序 我需要从中调用远程 Thrift 服务 说实话 我对这个主题有点迷失 http wiki apache org thrift ThriftInstallationWin32 h
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th

随机推荐

  • 如何集成 sympy 表达式和 Latex 格式

    您好 提前感谢您的帮助 我正在尝试将数学格式与 sympy 表达式混合在一起 我正在使用 jupyter 笔记本 我可以在单独的行上获得乳胶和漂亮的 sympy 打印 但似乎无法找到一种方法将它们组合成一行 下面的代码打印三行 第三行应该是
  • 当id包含点时,如何使用jquery通过ID选择html节点?

    如果我的 html 看起来像这样 td class controlCell td
  • Log4j 显示包名称

    现在对于我的 ConversionPattern 我有 log4j appender A1 layout ConversionPattern d yyyy MMM dd HH mm ss SSS 5p t F L m n 我想做的还包括包含
  • 如何防止Excel单元格更新?

    我有一个相当大的范围 10 000 行 10 列 我每天都会逐行填充它 我还有一个较小的范围 366 行 5 列 其中 对于每个单元格 我运行一个宏 该宏的作用与 DSUM 或 SUMIF 的作用几乎相同 但具有多个条件 问题是 在实现了这
  • 最大值和最小值的算法? (目标-C)

    这是我正在阅读的一本学习 Objective C 的书的一部分 下面定义了一个名为 MAX 的宏 它给出了两个的最大值 价值观 define MAX a b a gt b a b 然后书中有一些练习要求读者定义一个宏 MIN 找到两个值中的
  • 从 Google Chat POST 请求验证 JWT

    我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat 我正在使用快递来接收请求 我需要验证所有请求是否都来自 Google 并且希望使用 Google 随请求发送的不记名令牌来执行此操作 我的问题是我正在努力寻
  • 找出最后获得焦点的控件

    我有一个带有几个文本框和一个按钮的 C Windows 窗体应用程序 我想找出具有焦点的文本框并用它做一些事情 我已经编写了以下代码 但它当然不起作用 因为按钮一旦按下就会获得焦点 private void button1 MouseDow
  • 在winforms设计器中,我可以关闭烦人的双击->事件处理程序创建背后的代码吗?

    大多数时候这很方便 但有时我想关闭它 有人知道怎么做吗 没有这个选择 解决方法很简单 只需键入 Ctrl Z 并单击 是 即可
  • 我可以使用什么 Linq 查询来按类别返回所有产品的计数?

    给定以下表结构 如何使用 Linq 查询返回类别名称列表以及该类别中的产品总数 Category ID Name Product ID IDCategory Name 我理想的回报是 Clothes 156 Electronics 2149
  • 处理多个切换

    我陷入了一个toggle 噩梦 终于寻求帮助 我想要的很简单 我有三个链接 a showcountries bronze a showcountries silver a showcountries gold 和三个盒子 countries
  • Android 底部菜单栏

    我想在我的应用程序底部实现一个菜单栏 就像我在 Facebook Google stumble 等许多主要应用程序中看到的那样 见下图 其关键方面是它覆盖在实际内容的顶部 当您向下滚动时 它会消失 但当您向上滚动时它会回来 由于很多应用程序
  • 优化 itoa 功能

    我正在考虑如何使用SSE指令实现整数 4字节 无符号 到字符串的转换 通常的例程是将数字相除并将其存储在局部变量中 然后反转字符串 本示例中缺少反转例程 char convert unsigned int num int base stat
  • 当第一个套接字连接时加载两个图像而不是一个 - Node.js

    我正在尝试在我的游戏中实现多人游戏功能 我在用着node js为了这 当一个人连接时 应该将一张图像加载到浏览器中 相反 它加载两个图像 这是我班级的一部分 var count 0 Keep track of which player we
  • 如何使用elasticsearch进行分页?来自 vs 滚动 API

    我使用elasticsearch作为数据库来存储大量日志数据 我知道有两种方法可以进行分页 使用大小并来自 API 使用滚动API 现在我使用 from 进行分页 从前端和后端获取页面和大小参数 Java searchSourceBuild
  • 是否有可能比 O(n log n) 更好地计算数字列表的中位数?

    我知道可以在 O n 中计算数字列表的平均值 但是中位数呢 有没有比排序 O n log n 和查找中间元素 或者如果列表中有偶数个项目则两个中间元素的平均值 更好的算法 是的 您可以在 O n 时间内 确定性地 完成此操作 http ww
  • 当文件太大时,Flask 会重置连接而不是返回 413

    When MAX CONTENT LENGTH已定义 Flask 应该返回 413 但在我的例子中 它会重置连接并显示以下错误 Error 101 net ERR CONNECTION RESET The connection was re
  • 如何在 PHP 中解析和处理 HTML/XML?

    如何解析 HTML XML 并从中提取信息 Answer recommended by PHP collectives php Collective 原生 XML 扩展 我更喜欢使用其中之一原生 XML 扩展 https php net m
  • Bootstrap 如何从一个类切换到下一个类?

    我试图理解Bootstrap 3的反应能力 我明白在css如果一个元素有 2 个类 那么第二个类将覆盖第一个类 但是 当您使用以下命令创建响应式设计时Bootstrap 您的元素将如下所示 div class col sm 1 col md
  • 将 JSON 对象转换为 protobuf IStruct

    我正在使用Nodejs 的 Dialogflow API https cloud google com nodejs docs reference dialogflow 0 8 x google cloud dialogflow v2 这个
  • 双向消息传递的节俭

    我很好奇 Thrift 是否适合我的用例 我正在制作另一个消息系统 其中有客户端和服务器 但客户端和服务器都向对方发起请求消息 并且并非所有消息都可能是请求 而只是通知 回到 10 年前 我使用手动二进制编解码器完成了这项工作 回到 5 年