为什么 Apache Thrift 需要支持 Server?
Why does Apache Thrift need to support Server?
我是 Apache Thrift 的新手。我认为这是一个非常棒的工具,它能够使用 IDL 来定义客户端和服务器之间的协议,以便它可以轻松地交换信息,并且程序员可以节省编写额外代码的工作量。
但是,我不确定为什么 Thrift 需要有服务器支持,例如简单服务器?这是否意味着 Thrift 包含足以提供服务的服务器基础设施?那么,作为开发者,我们不需要自己架设服务器吗?
或者,我们还需要设置一个服务器,这需要符合 Thrift 的服务器要求?
与您一样probably already found out,Apache Thrift 既是序列化框架又是RPC 框架。那么这是什么意思?
拼图
它的 序列化 部分是序列化您从 Thrift IDL 生成的 类 等的拼图的一部分。结果,您将获得一些准备好发送到其他地方的字节。当然,它还使您能够将那堆字节反序列化为再次有用的东西。根据您使用的 transport/protocol 堆栈,字节可能是包含二进制数据的 steream,或包含一些 JSON 的文件,或包含您选择的任何 TProtocol
的内存缓冲区。
第二部分是允许您发送和接收 远程过程调用 (RPC) 的基础结构,跨越您能想到的任何 TTransport
。 Thrift 包括对套接字、HTTP、管道等的支持,具体取决于您计划使用的语言绑定。
模块化是关键
Apache Thrift 的强项之一是模块化。我刚才描述的整个 transport/protocol 堆栈被设计为一组可插入的部分。这不仅允许您自由组合现有的作品,例如形成一个套接字服务器,在一个端点上提供三种服务,通过以紧凑的框架格式压缩的消息进行通信。如果需要,它还使您能够在很短的时间内编写自己的特定 TTransport
。
最后,还有一些人使用 Apache Thrift 让他们的应用程序通过 MQ 系统进行通信,要么只使用 Thrift 的序列化部分,要么编写他们自己的传输 and/or 协议。一些示例可以在源代码树的 /contrib
folder 中找到。
我们需要服务器吗?
从技术上讲,我们不需要。但由于 Apache Thrift 也是一个 RPC 框架,服务器是拼图的核心部分。你知道吗?准备好这些选项以供使用真的很方便,而不是从头开始编写您自己的 TThreadPoolServer
或 TNonblockingServer
!
我是 Apache Thrift 的新手。我认为这是一个非常棒的工具,它能够使用 IDL 来定义客户端和服务器之间的协议,以便它可以轻松地交换信息,并且程序员可以节省编写额外代码的工作量。
但是,我不确定为什么 Thrift 需要有服务器支持,例如简单服务器?这是否意味着 Thrift 包含足以提供服务的服务器基础设施?那么,作为开发者,我们不需要自己架设服务器吗?
或者,我们还需要设置一个服务器,这需要符合 Thrift 的服务器要求?
与您一样probably already found out,Apache Thrift 既是序列化框架又是RPC 框架。那么这是什么意思?
拼图
它的 序列化 部分是序列化您从 Thrift IDL 生成的 类 等的拼图的一部分。结果,您将获得一些准备好发送到其他地方的字节。当然,它还使您能够将那堆字节反序列化为再次有用的东西。根据您使用的 transport/protocol 堆栈,字节可能是包含二进制数据的 steream,或包含一些 JSON 的文件,或包含您选择的任何 TProtocol
的内存缓冲区。
第二部分是允许您发送和接收 远程过程调用 (RPC) 的基础结构,跨越您能想到的任何 TTransport
。 Thrift 包括对套接字、HTTP、管道等的支持,具体取决于您计划使用的语言绑定。
模块化是关键
Apache Thrift 的强项之一是模块化。我刚才描述的整个 transport/protocol 堆栈被设计为一组可插入的部分。这不仅允许您自由组合现有的作品,例如形成一个套接字服务器,在一个端点上提供三种服务,通过以紧凑的框架格式压缩的消息进行通信。如果需要,它还使您能够在很短的时间内编写自己的特定 TTransport
。
最后,还有一些人使用 Apache Thrift 让他们的应用程序通过 MQ 系统进行通信,要么只使用 Thrift 的序列化部分,要么编写他们自己的传输 and/or 协议。一些示例可以在源代码树的 /contrib
folder 中找到。
我们需要服务器吗?
从技术上讲,我们不需要。但由于 Apache Thrift 也是一个 RPC 框架,服务器是拼图的核心部分。你知道吗?准备好这些选项以供使用真的很方便,而不是从头开始编写您自己的 TThreadPoolServer
或 TNonblockingServer
!