gpt4 book ai didi

Thrift可以使用http,但它是二进制通信协议(protocol)?

转载 作者:行者123 更新时间:2023-12-01 21:26:41 25 4
gpt4 key购买 nike

我看到一些消息来源声称 Thrift 是一种二进制通信协议(protocol)(例如,其维基百科文章的第一行)。

但是,Thrift 可以通过 http 进行调用,我认为这是一种基于文本的协议(protocol),而不是二进制协议(protocol)。

也许消息来源只是说 Thrift 有可用的二进制协议(protocol)选项,但也有像 http 这样的选项?

我意识到我可能误解了 Thrift 上下文中“协议(protocol)”的含义。例如,使用用于 JSON 数据编码的 TJsonProtocol 选项,数据是否可以通过 http 以及二进制协议(protocol)发送?

如果我误用了任何术语,我认为这可能会导致我的困惑,对此我深表歉意。遗憾的是,我不是 OSI 模型方面的专家。

最佳答案

首先,维基百科不是权威资源,所以不要在上面下任何赌注。

不,Thrift 不是二进制通信协议(protocol)。 Thrift 根本不是一种协议(protocol)。

Thrift is a framework它提供了序列化到各种协议(protocol)和传输并通过其进行通信的能力,其中包括 HTTP 和二进制,但绝不限于此。

事实上,Thrift 库的整体理念是提供丰富的选项,从中可以尽可能自由地构建特定的解决方案。您想要 HTTP 上的 JSON 吗?喏,给你。您想要二进制但需要比二进制更紧凑的东西?当然,使用 TCompactProtocol 或 GZIP。您想添加 TLS 吗?没问题,只需将其添加到您的堆栈中即可。命名管道? SASL?发消息?你说出它的名字。

如果这还不够(或者如果您选择的语言尚未实现某个特定项目),那么人们总是可以编写自己的传输或协议(protocol)实现。这并不难,而且the /contrib folder已经有一些例子。

I realize I may be misunderstanding something about what "protocol" means in the context of Thrift.

确实,协议(protocol)是一个重载的术语。在 Thrift 上下文中,协议(protocol)是源自 TProtocol 的某种实现。 。

    void WriteMessageBegin(TMessage message);
void WriteMessageEnd();
void WriteStructBegin(TStruct struc);
void WriteStructEnd();
void WriteFieldBegin(TField field);
void WriteFieldEnd();
void WriteFieldStop();
void WriteMapBegin(TMap map);
void WriteMapEnd();
void WriteListBegin(TList list);
void WriteListEnd();
void WriteSetBegin(TSet set);
void WriteSetEnd();
void WriteBool(bool b);
void WriteByte(sbyte b);
void WriteI16(short i16);
void WriteI32(int i32);
void WriteI64(long i64);
void WriteDouble(double d);
void WriteString(string s);
void WriteBinary(byte[] b);

TMessage ReadMessageBegin();
void ReadMessageEnd();
TStruct ReadStructBegin();
void ReadStructEnd();
TField ReadFieldBegin();
void ReadFieldEnd();
TMap ReadMapBegin();
void ReadMapEnd();
TList ReadListBegin();
void ReadListEnd();
TSet ReadSetBegin();
void ReadSetEnd();
bool ReadBool();
sbyte ReadByte();
short ReadI16();
int ReadI32();
long ReadI64();
double ReadDouble();
string ReadString();
byte[] ReadBinary();

Thrift 协议(protocol)提供了一种高级方式来写入和读取底层传输层。 Thrift 协议(protocol)负责在程序中使用的数据和进入 native 传输的原始字节之间进行转换。例如,TJSONProtocol负责将数据呈现并解析为 JSON 字节。

相比之下,Thrift TTransport位于协议(protocol)层下方的派生决定了数据的物理存储位置。这个方面完全被抽象掉了,协议(protocol)层没有关于物理介质的线索(也不应该)。反之亦然,传输层不知道流经它的数据意味着什么,它只看到字节。

关于Thrift可以使用http,但它是二进制通信协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com