问题标签 [thrift]

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 投票
4 回答
12772 浏览

c++ - Thrift 与协议缓冲区

我使用 PB 已经有一段时间了,但是,Thrift 一直在我的脑海里。

在我看来,节俭的主要优点是:

  1. 本机集合(即向量、集合等)与 PB 重复提供的功能类似于但不太像(没有迭代器,除非您深入研究文档指出“在大多数情况下不需要”的 RepeatedField)。
  2. 提供了一个不错的 RPC 实现,而不仅仅是插入你自己的钩子。
  3. 更多官方支持的语言(PB 为 Java、C++、Python 提供“官方”支持)

节俭的缺点:

  1. RPC 实现意味着我不能在顶部插入我自己的(例如)加密/身份验证层。
  2. Windows 支持似乎不是很好。
  3. PB 肯定似乎有(如果不是更好的话)更易于访问的文档。

中性的:

  • Windows (Thrift) 上 .lib/.dll 的大小未知。
  • Windows 上的大尺寸 .lib(PB,但它确实提供了一个小得多的 -lite)。
  • 速度方面,它们似乎都相似。

我还没有准备好冒险并切换到 Thrift,任何人都可以为我提供更多优点/缺点,或者选择一种方式或另一种方式的理由吗?

谢谢!

0 投票
1 回答
460 浏览

range - 在 Cassandra 中加载 range_slices 时出现问题

我在从 Cassandra 中获取数据时遇到了一些麻烦。主要问题是这个异常:

那我该怎么办?我describe_ring用来获取网络的拓扑,然后我询问网络中的每个节点,describe_splits这给了我应该用来获取范围的令牌,然后我开始询问它们,确保我设置了start_tokenend_token键范围。

有任何想法吗?

0 投票
2 回答
147 浏览

web-services - 为什么“do_GET”和成熟的 Rails 风格路由之间没有中点?

我希望向网络公开一些服务。将会有带有基于 jQuery 的 JavaScript 代码的静态网页来访问这些服务,并且还会有各种应用程序可以访问这些服务。(或者没有人会关心;这也很有可能:-)

每个服务都可以很好地定义为一组方法,这些方法作用于一定数量的输入参数,并返回一定数量的输出参数。大部分是 REST,除了“身份”的概念——这些服务需要一些登录,并且登录确实为您设置了允许使用哪些服务的方法以及哪些特定实体的权限您可以使用这些方法解决问题。

理想情况下,我想使用 JSONP 公开服务,以使服务易于以跨站点方式使用——那些静态 Web 应用程序不应该都必须从我的应用程序服务器的域中提供服务。

数据类型集相当基本——varchar(255 个字符)、text(8191 个字符)、id(32 个字符,C 样式标识符约束)、double、long(在 JavaScript 中很难做到)、bool、datetime、email (varchar 匹配一个正则)和 url(varchar 匹配一个正则表达式)可能就足够了很长一段时间。

如果可能的话,我希望使用可以在多线程内核上扩展的应用程序服务技术来实现这些服务——如今,24 线程是普通中档服务器的标准配置。坚持使用 Python 或 Node.js 会让我感到不安,因为它们缺乏线程支持。另外,我希望类型是静态的,因为我相信静态类型可以防止某些类型的错误,这也与 Python、Node.js、PHP 和 Ruby 相关。

我也想在 Linux 上服务。这是一个非常艰巨的要求:-)

在静态语言世界中,实际上只有少数服务器框架或框架方法。Mono 有 HttpListener。有 Java 的 Jetty。还有几个。还有一些更深层次的框架,它们的开销比我想要的要多——J2EE、ASP.NET 等(在动态世界中,你有 Cake.PHP、Rails、Django 等)

因此,在最好的情况下,我希望 GET URL /foo/bar?arg1=2&arg2=xyzzy 映射到我编写的 foo 类型的对象,方法 bar,采用 int 和字符串类型的参数 arg1 和 arg2 (说)。我希望位于 HTTP GET 和对象方法之间的服务器胶水做两件事:1)权限控制(每个方法可以有一个或多个必需的权限)2)类型检查(每个参数都应该根据预期进行验证并强制原生类型的 URL 字符串格式)一旦方法返回一个或多个值(键/​​值对),胶水应确保返回值也符合规范,转换为正确的 JSON,并应注意返回如果在代码中引发异常,则会产生适当的错误结果。

我一直在寻找这种解决方案的高低,但我找到的所有解决方案都相去甚远。JSP 和 ASP 都是从 HTML 假设开始的——我通常生成 JSON,它不能很好地与语法集成(委婉地说)。JSPX,以及许多其他技术(HttpListener、CGI、Python Twisted,...)都停留在“do_GET”级别——没有分派到对象,没有权限控制,没有类型检查。然而,所有更高级别的框架都在此基础上添加了更多内容,并且经常添加我不需要的复杂路由——而且通常情况下,仍然不进行权限检查,而是将其保留为某些东西您必须在每个功能实现中手动编写。

我认为我能找到的最接近我想要的是 Thrift。但是,它仍然不进行权限检查,并且它所支持的“PHP 服务器”似乎是一个在端口 80 上侦听而不是与 Apache 集成的愚蠢 PHP cli 进程,并且它没有设置为支持 JSONP。

我错过了什么吗?是否有一些(最好是静态类型和多线程支持的)服务器技术可以进行类型检查和权限检查以及简单的对象方法分派,而没有大量其他杂物妨碍,并且可以从中调用(并响应到)JSONP?我应该延长 Thrift 吗?在每个方法上添加权限约束将是一个相当大的扩展,但至少我会得到 Thrift 所拥有的其他支持。(然后我必须添加 JSONP 支持,然后......)

0 投票
1 回答
1675 浏览

java - Thrift 版本之间的数据格式兼容性

我正在尝试升级使用 Thrift 0.2 库进行通信的系统。由于这是相当旧的版本(最新稳定版是 0.5),并且据称性能有显着改进(在 0.4 中),我希望升级。但是,我找不到有关基础数据格式是否存在不兼容更改的信息。基于版本控制方案,希望没有;但由于这些仍然是 1.0 之前的版本,可能对稳定性的期望较低。

我希望了解数据格式本身向后兼容的原因是它允许对组件进行逐个升级。

无论如何:我希望有更多信息的人可以指出我正确的文档。

0 投票
3 回答
7181 浏览

authentication - 如何使用 Thrift 处理身份验证和授权?

我正在开发一个使用节俭的系统。我希望检查客户身份并进行 ACL 操作。Thrift 是否为这些提供任何支持?

0 投票
6 回答
38608 浏览

protocol-buffers - Apache Thrift、Google Protocol Buffers、MessagePack、ASN.1 和 Apache Avro 之间的主要区别是什么?

所有这些都提供二进制序列化、RPC 框架和 IDL。我对它们之间的主要区别和特性(性能、易用性、编程语言支持)感兴趣。

如果您知道任何其他类似的技术,请在答案中提及。

0 投票
2 回答
2805 浏览

java - 如何以编程方式将索引添加到 Cassandra 0.7

我尝试以编程方式在http://www.riptano.com/blog/whats-new-cassandra-07-secondary-indexes上运行演示,但结果与在 CLI 中运行不同。似乎 Cassandra 只能在添加索引后索引列。所有以前的数据都未编入索引。

完整的源代码如下:-

结果是:-

0 投票
1 回答
1592 浏览

cassandra - 使用 Thrift API 的问题

我已经在我的 Ubuntu VM 上安装了 Cassandra 并构建了源代码。我试图使用 Thrift API,似乎我的 bin 中的 libthrift-0.5.jar 不是我需要用来与正在运行的 cassandra 实例交互的文件。

还有其他安装 Thrift JAR 的方法吗?我找到了

/cassandra/界面/节俭

具有与 Cassandra 接口相关的 Thrift 源的文件夹。当我尝试ant gen-thrift-java从命令行执行时,构建失败并显示以下消息:

执行失败:java.io.IOException:无法运行程序“thrift”(在目录“/home/user/cassandra/interface”中):java.io.IOException:错误=2,没有这样的文件或目录

有人可以给我一些关于我需要做什么才能在这里与 Thrift 合作的想法吗?

谢谢

0 投票
4 回答
2449 浏览

interop - Erlang 通用二进制格式?有人用吗?

我最近偶然发现了这篇 2002 年的会议论文( Joe Armstrong的让 Erlang 与外界交谈),我想知道这是否是一个被忽略的标准,或者是否有任何采用?

我应该专注于 Apache Thrift 进行跨平台通信吗?(我选择的任何解决方案都至少涉及 Erlang)

0 投票
2 回答
458 浏览

cassandra - 出于什么原因不推荐使用 Thrift API 访问 Cassandra?

请列举为什么不建议为 Cassandra 使用 Thrift 接口的原因?可能的优点和缺点是什么?