0

我想为 Java 接口编写数据分析插件。该接口可能在不同的计算机上运行。该接口将发送命令,Python 程序可以返回大数据。该接口由 Java Webstart 系统分发。两者都从 MySQL 服务器访问主要数据。

实施沟通的不同方式和优势是什么?当然,我在网上做了一些研究。虽然有很多建议,但我仍然不知道有什么区别以及如何做出决定。(我对他们一无所知)

我找到了使用套接字的建议,这似乎很好。为每个连接编写一个专门用于 Python 分析过程的服务器是否简单(临时数据可能会在该特定客户端的一个通信请求之后保留)?

我正在考虑学习如何使用套接字和传递 YAML 字符串。也许我的主要问题是:与 RabbitMQ、ZeroMQ、CORBA、SOAP、XMLRPC 等系统有什么关系和优势?

还有人建议使用管道或共享内存。但这不符合我的要求?

是否有任何方法在调试或其他特性方面具有优势?

我希望有人可以帮助我了解技术并帮助我决定解决方案,因为很难从技术描述中判断。

(我不考虑 Jython、JEPP 等解决方案……)

4

1 回答 1

1

就您描述的优点提供意见,听起来您正在处理可能需要大量时间来获取和序列化的潜在大数据/查询,在这种情况下,您肯定想要使用可以处理并发连接而无需堆叠的东西起线程。因此,在 Python 领域,我不能推荐 Twisted 以外的任何网络库。

http://twistedmatrix.com/documents/current/core/examples/

无论您决定使用普通 HTTP 还是您自己的协议,twisted 几乎都是并发网络的一站式商店。当然,这个名字被广泛使用,文档是亚特兰蒂斯,但如果你花时间学习它,在网络领域几乎没有什么是你无法完成的。您可以扩展基本协议和工厂,以制作一台服务器,该服务器可以在基于反应器的事件循环中处理您的数据,并在准备好时响应延迟请求。

序列化格式实际上取决于数据的性质。作为响应输出的内容中会有任何二进制文件吗?复杂类型?如果是这样,那排除了 JSON,尽管这正在成为最常见的序列化格式。YAML 有时似乎在 python 社区中享有特权——我没有广泛使用它,因为我对连续剧所做的大部分工作都是用 javascript 在前端呈现数据。

当您需要推迟后台任务而不挂起响应时,消息队列确实是工具箱中最重要的工具。它们通常用于 Web 应用程序,在这些应用程序中,HTTP 请求不应该挂起,直到需要进行的任何复杂处理完成,因此 UI 可以提前呈现并依靠隐含的“承诺”处理将发生。它们有两个重要的特性:它们依赖于最终的一致性,因为该过程可以在协议中的响应发送后很长时间才能完成,并且它们还具有故障安全和重试指令,以防任务失败。它们是您提交“尽快完成这项非常艰巨的任务,我相信您会完成它”问题域的地方。

如果我们不是在谈论潜在的巨大响应体,以及序列化输出中相对简单的数据类型,那么在 Twisted 中滚动一个简单的 HTTP 延迟服务器并没有错。

于 2012-06-28T16:26:26.500 回答