当前位置: 首页 > 知识库问答 >
问题:

Thrift用于双向消息传递

严令秋
2023-03-14

我很好奇节俭是否适合我的用例?我正在制作另一个消息传递系统,其中有一个客户端和服务器,但客户端和服务器都会向另一个发送请求消息,并且并非所有消息都是请求,只是通知。

回到10年前,我用基于二进制的手卷编解码器做到了这一点。回到5年前,我使用Google协议缓冲区再次做到了这一点。但我现在听到了更多关于Thrift的信息。

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

我也在考虑messagepack和协议缓冲区,因为我知道它们非常适合非请求/回复消息模式。

谢谢。

共有1个答案

戚正业
2023-03-14

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

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

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

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

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

然而,只有在使用完整的旧货栈时,才会出现所有这些情况。您可以通过实例化各种对象(协议、传输、处理程序、服务器等)来创建客户端和服务器,尽管我自己从未尝试过,但我不明白为什么您不能创建传输的派生实现,然后使用它来代替Thrifts自己的传输。

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

 类似资料:
  • 我对Spring集成相对较新,但我的任务是实现一个tcp网关,该网关需要: 在套接字上侦听消息 在我的Spring集成经验中,消息流不是双向的。我只将路由器配置为侦听、处理消息和输出到队列/主题。但是,在这种情况下,我需要接受消息并返回响应,同时将某些消息转发到队列。建议? 这是到目前为止我的集成xml。 如何将handleInput的输出转发到队列,同时从网关返回一些响应? 编辑:在与Gary进

  • 目前,我们在多个地理区域拥有数据中心,每个数据中心托管着需要相互通信的不同应用程序和服务。目前,我们正在使用http进行通信,出于性能原因,希望探索其他协议。可以使用ProtocolBuffers或Thrift通过tcp/ip在地理区域之间进行通信吗?如果是这样的话,延迟是否会扼杀协议缓冲区或节俭提供的任何性能提升?是否有其他合适的选择?

  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment