首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++后端基础架构

C++后端基础架构
EN

Stack Overflow用户
提问于 2013-09-06 02:24:57
回答 2查看 532关注 0票数 0

我们有非常复杂的C++图像处理引擎,使用英特尔编译器,OpenCV等。目前它正通过C#互操作层集成到我们的生产中,它非常薄,几乎不会影响速度性能(我们谈论的是每个请求几毫秒)。现在,我们正计划将我们的系统迁移到CentOS (仍然支持Windows平台)。从历史上看,我不太信任Mono,JNI也有它的问题,所以最符合逻辑的解决方案是转向纯粹的C++实现。

考虑到我们需要移植以下功能,你认为这是个好主意吗?

1)文件系统2) JSON 3)线程4) Storm / Kafka / RabbitMq 5) XML 6) Log2Cxx

顺便说一下Qt,我们不需要UI,但它可以覆盖文件系统,线程,XML,甚至JSON。

非常感谢,Pavel

EN

回答 2

Stack Overflow用户

发布于 2013-09-06 03:54:07

你的信用卡付款很有可能是由运行Qt核心的系统处理的,所以你是在正确的轨道上。

Qt是模块化的。您需要几个模块来排除GUI内容,尽管GUI在服务器中也是可用的。例如,绘制一些图像并将其发送回客户端非常容易。我建议尽可能使用Qt,只有在Qt不能提供你需要的东西并且不能以一种简单的方式实现时才使用Boost。如果你在Qt和boost之间犹豫不决,你最终会得到大量的胶水代码,这将使整个事情变得比必要的多得多。

Qt本身没有日志记录机制,它有一些用于调试输出的工具,但如果你想要真正的日志记录,它需要更多的工具。它确实涵盖了文件系统、json、线程、网络、使用事件队列和/或信号槽连接的对象之间的通信。它还具有流式XML解析器。您可以将您的项目与log2xx集成。持久的消息传递基础设施也需要集成,因为Qt不提供这一点。您可能会发现,就消息传递而言,只实现您需要的内容会更容易。

询问线程的速度开销是没有意义的,因为在几乎所有的框架中,线程控制器只是在线程中启动用户代码的一种方式。一旦创建了线程,它就没有运行时开销。一切都取决于你在线程中运行的代码。

因此,你想问的是,你通常会在线程中“运行”什么代码?理想情况下,您只希望运行QThread的默认实现中提供的事件循环。只有当您从其他线程向事件循环发布消息时,该事件循环才与其他线程同步。这就是线程间通信的任何其他实现都会做的事情,因此不存在额外的Qt特定开销。然后将QObjects移到要运行它们的线程中(或者简单地在已在该线程中运行的代码中创建)。

当您必须封装阻塞第三方代码时,比如臭名昭著的阻塞数据库接口,那么您将被迫将每个数据库连接放入其自己的线程中。无论您是否使用Qt,都会出现这种情况,因此没有什么特别之处。

Qt的XML和json实现是合理的,我不明白为什么它们会比其他任何东西都差。

如果你对你的项目是认真的,你会成为Digia的客户。我相信他们会回答你的问题,关于提供什么级别的支持,关于稳定性等等。

在项目中使用Qt的一个好处是它是跨平台的:您可以在Linux或Windows服务器上运行它。如果它是由第三方安装的系统,这可能是一个重要的考虑因素。

票数 1
EN

Stack Overflow用户

发布于 2013-09-06 03:36:31

Qt还可能涵盖Log2Cxx,因为它具有日志记录机制。据我所知,你可以在Qt5.0上解析JSON。QJson是另一种选择,你可以查看:

http://qjson.sourceforge.net/usage/

除了Qt,我还推荐Boost库,因为它是我在必要时在C++中使用的第一个库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18643394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档