【问题标题】:Interfacing Twisted to other applications将 Twisted 连接到其他应用程序
【发布时间】:2012-04-02 18:50:05
【问题描述】:

我决定将 Twisted 用于一个项目,并开发了一个服务器,可以将数据推送到其他计算机上的客户端。目前我正在使用虚拟数据来测试速度要求,但我现在需要将 Twisted 连接到我的其他 Python DAQ 应用程序,该应用程序基本上通过不同的传输(例如蓝牙)从各种外部设备收集实时数据(500 Hz)。 (注意:DAQ(数据采集)应用程序与 Twisted 服务器在同一台计算机上)

由于 DAQ 应用程序不是 Twisted 框架的一部分,我想知道将数据传递到 Twisted 服务器的最有效(最快、稳健、最小延迟)的方式是什么。我曾考虑过使用轻量级数据库、memcache、Queue 甚至 Twisted 插件,但很难说哪个是最合适和最合适的。我应该补充一点,DAQ 应用程序是在决定使用 Twisted 之前开发的,所以到目前为止我认为它与 Twisted 网络是分开的。

在系统的另一端,即驻留在多台计算机上的客户端,我遇到了类似的问题。当数据流入时(我正在发送数据行,每行大约 100 个字节),我想将此数据交给另一个应用程序,该应用程序将为 Web 应用程序处理这些数据(我更愿意为此使用 Twisted Web Service,但是不是我的选择!) Web 应用程序是用 Java 编写的。我再次考虑了上面的选择,但由于我是 Twisted 的新手,我不确定哪个是最好的方法。 (注意:Web 应用程序与 Twisted 客户端位于同一台计算机上)

任何建议或想法将不胜感激。

【问题讨论】:

  • DAQ 代表数据采集。

标签: twisted


【解决方案1】:

我的建议是build a simple protocol with twisted's built-in support for AMP;您可以使用implementations of AMP in other languages 之一将其连接到任何其他语言或框架。 AMP 旨在尽可能易于实现,因为它只是一个套接字,其中一些以长度为前缀的字符串排列成键/值对。

【讨论】:

  • 谢谢,但我可能误导了你。数据采集​​ (DAQ) 应用程序与 Twisted 服务器在同一个盒子上,而 Web 应用程序 (Java) 与客户端在同一个盒子上。我认为 AMP 用于跨网络调用,但我可能错了(我想我可以在 localhost 循环中使用它)。为我不够清楚而道歉。如果我能以这种方式使用 Amp,那将是一个很好的解决方案。
  • 进一步阅读后,我发现我可以将 AMP 用于本地 IPC,但如果可能的话,最好使用 TCP 以外的传输方式。再次感谢。
  • TCP 易于使用,可能几乎与您能找到的任何其他产品一样好。 UNIX 套接字可能具有一些安全优势,因为您可以让文件系统为您进行访问控制,否则您不会注意到与 TCP 的任何区别。
【解决方案2】:

显然有无数种不同的方法可以解决这个问题,但我首先会考虑使用队列将数据传递到 Twisted 服务器。如果您部署了许多开源队列工具之一(例如 RabbitMQ、ZeroMQ、OpenMQ 和其他许多工具),您应该能够使用 HTTP 等通用工具从您的 DAQ 产品中写入,然后也使用 HTTP 读入您的 Twisted 服务器。如果您不喜欢 HTTP,那么将有很多替代传输可供选择 - 只需确定您要使用的传输,然后将其用作选择排队工具的基础。

这将为您提供一个极其灵活的解决方案,因为您可以升级或更改这些产品中的任何一个,而对整个解决方案中的其他任何内容的影响最小。

【讨论】:

  • 我查看了您提到的前三个选项,并且非常喜欢 ZeroMQ,但出于各种原因,我试图限制我正在运行的应用程序的数量。我的高数据吞吐量可能不适合 HTTP(也许我可以使用 websockets)。 AMP 和 PB 提供内置解决方案,因此我正在研究这两种解决方案。我很欣赏你的建议。谢谢。
猜你喜欢
  • 2012-01-06
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多