2010-08-24 100 views
6

我正在编写新硬件设备的软件,我希望任何新的第三方应用程序能够访问它们,如果他们想。我应该使用CORBA,MessagePack RPC还是Thrift,还是其他的东西?

该软件将是一个本机进程(C++),应该可以由第三方游戏和希望支持该硬件设备的应用程序进行轮询。这些第三方应用程序也应该能够在订阅的基础上从本地进程接收事件。除了本地进程外,我还会为第三方开发人员提供“连接器”库,供他们可能选择的所有平台/语言(Java,C++,Python等)嵌入到他们的应用程序中,以便他们可以轻松地连接到设备几乎没有任何额外的代码需要由他们写。我想要定位所有桌面/笔记本电脑操作系统平台,并且对我想要公开的功能有一个很好的概念,但理想情况下我不想太困扰(即,我希望它可以从客户端和服务器进行优化扩展)观点)。

我正在寻找可靠性前进,性能,可维护性前进,跨平台/语言灵活性前进以及易于开发的顺序。

我应该使用什么?

CORBA,MessagePack-RPC,Thrift,还是其他什么?

(我省略了ICE因为它的许可)

+4

CORBA是*古代*。它也是重量级和过时的。几乎肯定有更好的解决方案。 – skaffman 2010-08-24 16:05:39

+4

skaffman,古代,重量级和过时的形容词不会让我失望。每个ORB的内存容量只有几兆字节,这对嵌入式系统来说可能不好,但对台式电脑来说绝对不错,而且性能很快。我关心性能速度,跨平台灵活性,易于开发,可维护性和未来的可靠性。只要这些部门在整体上是最好的,不管别人“认为”什么都没有关系,也不一定是“最新的时尚”,它会赢。我只是想知道这是否是对我所做的最好的。 – Navigateur 2010-08-24 22:33:06

+1

我们根本无法在不知道您的要求,您的软件是/是,目标受众,升级路径,运行平台等情况下回答这个开放式问题。 – 2010-08-25 23:49:05

回答

1

CORBA是目前唯一可以为我的系统工作的免费“RPC”,尽管它的规模非常糟糕。节俭并不适合Windows。即使它仍在开发中,MessagePack-RPC在所有语言和操作系统中都不可用。如果CORBA具有优雅的可扩展性,它可能根本不会过时。

协议缓冲区和消息传递将工作,我必须为每个平台/语言开发一个客户端和服务实现。它也将是非常可扩展的。我已经决定了。

+0

你为什么认为CORBA“非常糟糕”?现在有很多使用CORBA的非常高容量的系统。 – 2010-08-27 23:45:42

+2

添加一个新的属性,在CORBA中,当人们使用新的服务器使用旧客户端时,或者使用旧版本服务器的新客户端时(这两者都可能在我的情况下),可以很好地处理这个属性?我的印象是CORBA打破了。这很糟糕 - 它不一定是这种方式。如果CORBA无缝地处理附加和删除属性和功能,它将征服世界。人们希望始终更新其体系结构:任何所需的版本控制,约束和处理都应该是开发人员在CORBA之外的工作。 RPC本身应该是100%可伸缩/可去除的。 – Navigateur 2010-08-28 11:41:29

+1

很多RPC系统无缝处理版本控制。其中一个原因是它会在每一次CORBA调用中产生过多的开销。 – 2010-08-30 00:07:56

2

如果古代和权重股不把你赶走,过时绝对应该。无论如何,我可以告诉你我们最近在工作中使用Google协议缓冲区的方式,而且它们非常易于使用。

从开发人员的角度来看,您只需构建GPB(其实并不困难),然后它会为您生成源文件。最终的结果是跨平台的二进制消息传输消息传递接口(思考XML和有限的RMI,而不是类MPI功能)。

我们在Windows上使用它来与运行相同软件的基于Arm的Linux系统(来自嵌入式arm的TS-7200)进行通信。据我所知,它与许多语言兼容。

+0

这是消息吗?很有意思!考虑到灵活性,你会如何推荐我在我的情况下使用protobuf?我知道这是“不管你喜欢什么”,但我希望我的系统的每个新部分都能与每个旧部分向后兼容。 (这是展望未来 - 我还没有开始)。达到这个目标的最佳方式是什么? – Navigateur 2010-08-26 15:16:55

+0

如果您执行谷歌搜索,您可以在其回购中找到一些文档,其中包含一些最佳做法。这真的取决于你的确切情况。这不是严格的信息;它是一种跨平台/跨系统的二进制序列化方法。如果你只是为了数据传输,你可以做到这一点。如果你想构建一个RMI框架,你可以做到这一点。 – 2010-08-26 18:36:22

4

节俭或消息包是未来的最佳选择。两者都非常时尚,重量轻,不会为您的流程添加更多延迟。他们支持大多数通用语言,并且处于Active Development。在现阶段,我宁愿个人喜欢节俭,但消息包似乎承诺许多功能。

认为节俭可能不像我们想要的那样友好,但人们在窗户上使用它。 这是一个在窗户上节俭的入门指南。 http://wiki.apache.org/thrift/ThriftInstallationWin32 只有在Windows上安装并获取Thrift编译器会很麻烦。使用生成的文件取决于您选择的语言,许多语言通过导入节俭库可以很好地支持运行这些文件。(Java中是很容易的,Maven构件)

还有根据我在RPC frameworks available?

CORBA上可用的RPC框架的讨论是旧的麻烦,非常重量级的。

0

我目前正在使用Apache Thrift进行Hospital Manager项目。在许多领域它比CORBA要好,更不用说它是轻量级的,更容易实现和理解。 Thrift的学习曲线与CORBA相比绝对是微妙的,但Thrift的文档是最糟糕的。

我正在使用Obj-C和Java客户端连接的Ruby Thrift服务器。 Thrift解析器或“编译器”在为所需语言生成源文件方面做得相当不错,尽管它太冗长了。如果我正在开始一个新项目,我肯定会考虑实施Thrift或Google ProtoBuffs,因为CORBA确实过时了,未来可能不会实现新技术,更不用说有很多针对CORBA的漏洞和漏洞攻击因为它不在开发中,所以得到补丁,在你的新项目上出现一些严重的安全漏洞。在撰写本文时,Thrift支持许多编程语言:C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Objective-C,JavaScript,Node.js,Smalltalk,OCaml和Delphi。我认为,支持多种语言对于您的项目而言至关重要。

+1

最后我和ZeroMQ一起去了。你可能想看看它。这真的很酷,因为你可以将它设置为可扩展的(就添加/删除属性等而言)。 – Navigateur 2013-11-21 14:28:45