问题标签 [thrift-protocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
350 浏览

c# - .Net 中 Apache Thrift 反序列化的奇怪行为

我在我的应用程序中使用 Apache Thrift 在多台机器之间交换数据。

我从外太空接收数据,创建传输、协议并将接收到的数据反序列化为对象。这是我的代码:

我知道,我收到二进制序列化的TCciUserLoginV1.cciUserLoginV1_result,因为其他类型的反序列化会引发异常。但是 result.Success 属性的正常反序列化在 while 循环的第 10 次迭代后发生。为什么我使用while。谁能告诉我发生了什么事?

提前致谢。

0 投票
1 回答
682 浏览

thrift - 如何在 thrift-compiler 中为自定义语言创建自己的 thrift 语言模板?

我想使用 Thrift 作为 RPC-Protocol 从自定义的专有闭源语言调用 Java-Server RPC-Endpoints。(一些类似 c 的供应商特定的脚本语言)

不存在对此的绑定。

如何创建自己的生成特定语言代码的 thrift-compiler-plugins?没有在文档上找到任何内容。有没有类似模板语言的东西?

谢谢

0 投票
1 回答
617 浏览

c++ - Apache Thrift C++ typedef 问题

我正在尝试创建一个将两个数字相乘的简单节俭服务器。

我已经像这样编写了节俭文件:

之后我跑了thrift --gen cpp multi.thrift

我将骨架文件重命名为MultiplicationServer.cpp

但是当我尝试构建它时,我在 multi_types.h 文件中收到此错误:multiple types in one declaration 在 typedef int32_t int 行上 multi_types.h 文件如下所示:

我尝试删除该行,但随后出现很多undefined reference to错误。

我究竟做错了什么?

0 投票
1 回答
300 浏览

protocol-buffers - 可以从 protobuf/thrift 消息中删除字段标签吗?

我知道 protobuf/thrift 需要唯一的数字字段标签来提供版本兼容性。它们通过以这种方式序列化消息(某种)来提供版本兼容性:

<tag1> <value1> ... <tagN> <valueN>

反序列化时,它们获取标记值,查找消息模式,并知道将值填充到哪个字段。这样,只要我们添加不同标签值的新字段,消息就会兼容。

但我不认为这是一个很好的设计:

  1. 标签值必须在消息中进行编码。这有一些开销。

    例如。当客户端多次调用远程服务器上的 RPC 方法时,每个请求/响应中的标记值都是相同的。最好只发送<tag1> <value1> ... <tagN> <valueN>一次,然后只发送<value1> ... <valueN>

  2. 当改变一个字段的类型时,我们也需要改变标签值。忘记这样做会导致错误。

  3. 开发人员必须确保标签值是唯一的。通常人们会跟踪上次使用的标签 ID,并在添加新字段时增加它。但是当两个人在不同的分支中添加字段并进行合并时,很难解决冲突。

我认为更好的设计可能是:

为每种消息类型创建一个紧凑的模式,如下所示:

<field_name_1> <field_type_1> ... <field_name_N> <field_type_N>(按字段名排序)

要解决问题 1,请在执行任何操作之前交换消息模式。对于 RPC 示例,客户端将在发送第一个 RPC 之前发送其消息模式,然后在接下来的 RPC 中,它只发送<value_1> ... <value_N>. 当请求到达时,服务器将具有消息模式,并且知道如何反序列化它。

为了解决问题 2,当字段类型更改时,紧凑消息模式也将更改。程序将能够找出新旧模式不匹配,并报告错误。

为了解决问题 3,开发人员不再需要注意分配唯一的标签值。他们仍然需要注意分配唯一的字段名称,但这应该更容易,并且不太可能导致合并冲突。

这可能是一个可用的设计吗?它会出现什么问题?

0 投票
2 回答
1625 浏览

proxy - 您如何通过公司代理使用 Thrift 协议?

我在互联网上进行了搜索,但似乎找不到任何关于如何从代理后面使用 Thrift 协议的简单说明。

给你一些背景知识——我们有一个 Zipkin 实例设置 ( https://github.com/twitter/zipkin ),它使用 Cassandra 实例 ( http://cassandra.apache.org/ ) 来存储 Zipkin 跟踪。我们的目的是与收集器协商 thrift 协议,然后收集器负责将跟踪写入 Cassandra。

我们必须具备哪些条件才能通过我们的公司代理成功进行谈判?我们是否只需要在尝试协商时设置某些代理属性,还是必须设置其他允许协商发生的东西?

人们可以在资源和/或答案方面提供任何帮助,我们将不胜感激。

0 投票
1 回答
1182 浏览

cassandra - 混合负载 cassandra-压力测试

需要一些有关 cassandra 压力测试的帮助。我已经从 datastax 网站安装了 cassandra-stress 2.1 工具。我想以 10:1 的比例并使用 15 个线程进行读+写压力测试。我不知何故无法让它工作。我能够成功地分别进行读写测试。

我正在使用的命令: ./cassandra-stress mixed ratio(write=1,read=10) n=10000 cl=ONE -port thrift=9160 -schema keyspace="Keyspace1" -mode thrift smart -rate threads>=15 threads \<=15 -节点 192.168.5.10

即使我将端口指定为 9160,但它使用的是本机 9042 端口。

我收到以下错误:

0 投票
1 回答
1967 浏览

cassandra - 无法通过 spark-cassandra-connector 打开与 Cassandra 节点的节俭连接

我整天都在苦苦挣扎,没有找到解决办法。

我正在尝试使用 spark-cassandra 连接器通过 Spark Streaming 应用程序连接远程 Cassandra 节点,并且该应用程序存在异常。任何帮助将非常感激。

一开始它看起来很好(连接成功,获取密钥空间......)但是,当它尝试打开节俭连接时,它失败,断开连接并关闭。

我已经打开了端口 9160、9042 和 7000。

在 cassandra.yaml 我设置

我错过了什么?

0 投票
1 回答
597 浏览

c++ - 在 Apache Thrift 中使用 seqid 的目的是什么?

我正在研究如何使用 Apache Thrift 库,发现任何发送/接收操作都使用 seqid 变量。但它总是设置为零,我没有找到任何改变或使用它的地方。它很奇怪。是否每个人都知道这个变量在 Thrift 中存在的目的是什么?

0 投票
1 回答
867 浏览

protocol-buffers - 我可以将 thrift rpc 与 protobuf 一起使用吗

作为主题,我想使用 thrift rpc 函数,而使用 protobuf 进行序列化,是否有任何项目可以做到这一点?我不想使用 thrift 序列化的原因是在我查看生成的 cpp 文件之后,我发现它没有 _in_place 函数,这意味着它必须复制构造每个成员,而对于我来说,我有char* 等已经分配在其他地方。

0 投票
1 回答
732 浏览

thrift - Apache Thrift: Communicating from Java Client to Python Tornado Server

I have a fairly straightforward Thrift IDL (split into two files as shown):

core.thrift

processing.thrift

I am using a Python Tornado Server and a Java client, for which the code looks like:

Python server:

Java Client:

The client successfully connects to the server and the Python PointQueryHandler.getElevations function gets called. However, the problem is that the arguments to PointQueryHandler.getElevations are always the default arguments of an empty list and "undefined" string. Whatever data I pass from the Java client is not, for some reason, arriving at the server.

What could be going wrong?

(Thrift version: 0.9.2, Python 2.7.5, JDK 1.7.0_45, Platform: Windows 7 64-bit)