小编sqe*_*ixs的帖子

与使用简单的套接字/网络编程相比,何时以及为什么使用Thrift会是更好的解决方案?

我想将Thrift用于一个项目,但是我有很多理由,为什么它比仅使用通过网络发送的简单套接字和结构更好。我试图做出的每一个论点总是归结为这样一个事实,即对于小型应用程序而言,简单的套接字编程更容易实现。显然,是否使用它很大程度上取决于项目,但是我的情况尤其是与Windows服务应用程序(c ++或c#)对话的c / c ++中的linux应用程序。我正在尝试编译使用节俭的利弊列表(主要是利弊),而不只是通过套接字发送简单的函数。这是我到目前为止收集的关于节俭的信息(我承认其中一些可能不准确,或者我可能需要更多的解释/说明)(我发现了许多此类信息)http://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html):

Thrift是另一个RPC和序列化框架选项,由用于处理分布式对象通信/ RPC和序列化的库和一个编译器组成。Thrift是Apache License 2.0下的一个免费的开放源代码框架,该框架允许软件的用户自由地出于任何目的使用该软件,对其进行分发,对其进行修改以及在该版本下分发该软件的修改版本。许可条款,无需担心使用费。此外,只要合并作品的许可也是GPL 3.0,它就可以与GPL 3.0许可的内容结合。Thrift是一个相当新的框架,它起源于Facebook开发的RPC框架,然后作为开源发布。它自2008年左右开始存在,并拥有一个繁荣的用户社区。

默认情况下,Thrift使用行业标准JSON或其他内置协议选择来定义数据类型和协议;但是,它也支持自定义的备用接口描述语言。Thrift库本身可以以多种语言(独立于平台)进行编译,并且Thrift编译器可以从界面/配置文件以多种语言自动生成类,服务器,客户端和存根/骨架代码。Thrift具有阻止/阻止服务器选项供您选择。如果使用Thrift,则需要编写受限的网络代码,因为所有代码都包含在内。需要编写IDL文件来定义用于序列化/反序列化的数据包数据/命令。

Thrift支持以下原始类型:

  • bool:布尔值(正确或错误)
  • 字节:8位有符号整数
  • i16:16位有符号整数
  • i32:32位有符号整数
  • i64:64位有符号整数
  • double:64位浮点数
  • 字符串:使用UTF-8编码编码的文本字符串

以及以下复杂类型:

  • 记录
  • 结构
  • 货柜
  • 例外情况
  • 服务

Thrift支持长期的模式演变,这允许修改模式(例如新字段和数据类型/属性)而不会丢失旧接口文件之间的任何向后兼容性。当然,仍然需要修改客户端/服务器逻辑以支持架构更改中的新功能。消息/命令用标识符标记,因此接收端可以将它们与模式匹配。编译存根/骨架代码以处理接口文件中定义的消息时,需要执行额外的编译步骤。

使用Thrift可在模式更改(允许软件更新而不会破坏较旧的现场系统),平台独立性以及无需编写任何代码(无需处理之间的来回命令/数据)的嵌入式RPC和服务器之间实现向后兼容性。客户端和服务器。

sockets rpc network-programming thrift

6
推荐指数
2
解决办法
2794
查看次数

如何将perforce工作区指向跨两台计算机同步的项目?

我有一个eclipse同步项目,我在我的Windows机器上工作,然后在linux构建服务器上同步和编译它.但是,Windows工作区连接到perforce,而linux工作区则没有.问题是当Eclipse同步这两者时,权限会在linux端搞砸,这样我就无法执行通常在构建期间执行的某些shell脚本.我的解决方法是在执行构建之前以某种方式c​​hmod所有*.sh文件,但我宁愿让perforce知道这两个地方(这样我也可以从linux端或windows端提交).出于性能原因,我无法在远程构建服务器上运行eclipse,因此这是我找到的唯一解决方案.此外,当我尝试为linux端设置第二个工作区时,它给了我错误说"无法破坏X".我认为主要的问题是我在这里处理某种权限问题.

linux windows workspace perforce

3
推荐指数
1
解决办法
3389
查看次数