【问题标题】:Communication between Python and Jython(JAVA) App over neworkPython 和 Jython(JAVA) 应用程序之间的网络通信
【发布时间】:2011-08-22 03:53:51
【问题描述】:

我将开发一个基于 Saas(软件即服务)的应用程序,它使用将在服务器上运行的 python 应用程序和将作为 jython 应用程序运行的客户端 GUI。最初我的计划是客户端将在 Jython 中开发用于原型设计,但后来如果应用程序复杂性增加并且取决于 jython 的性能恶化,我会将客户端完全移植到 JAVA。

现在,我想探索一种方法,以便使用 Twisted 等知名工具在服务器和客户端应用程序之间进行有效的 TCP/IP 通信。我还在考虑其他选择,例如 corba 和 pyro。

所以基于此我有这个问题。

python 和 jython 客户端之间最有效的 TCP/IP 套接字通信方式是什么。我可以在 python 端使用twisted 在 jython 端使用 java socket api(它们是否兼容)?还是有其他更好的方法(用于原型设计和 RAD 目的)?

【问题讨论】:

  • 这是否始终由客户端控制,或者您有时需要从服务器“推送”数据?有多少客户端可能同时运行?将传输多少数据?通信响应对客户响应有多重要(客户是否会在交互使用过程中暂停发送/接收)?消息会多还是少?你需要什么样的安全?您是否需要支持其他客户端或其他协议(例如 http rest to server)?客户端和服务器之间不会丢失任何信息(例如财务数据)是否至关重要?局域网还是互联网?
  • @andrew - 这将是数据访问的推送和拉取方式。客户端可以有很多(在商业部署的情况下有数百甚至数千个),但我可以选择为每个客户端设置一个单独的服务器应用程序实例。数据传输量不会超过几百 KB,但每隔几个小时就会发生一次(从服务器推送)。
  • @andrew - 客户端响应能力至关重要,因为它(在某些情况下)必须在交互之间发送 n 个接收信息(拉取)。消息最初会很少,但随着应用程序的增长,这也会增长.对于安全性,最初用于原型设计,我可以使用非安全方式,但后来为了商业化,我将不得不使用 ssl 之类的东西。数据丢失并不是很严重,因为它可以从服务器应用程序中再次检索。服务器和客户端通信。将通过互联网。

标签: java python jython


【解决方案1】:

我建议使用 RPC,而不是通过套接字进行纯 TCP/IP 通信。

如果客户端很少,并且您不想使用复杂的技术,请使用 JsonRPC 或 XMLRPC 之类的东西。 (请注意,Pyro 只能在服务器和客户端都用 Python 编写时使用。如果您打算稍后迁移到 Java,则应该考虑这一点。)

如果性能和安全性在这里很重要(例如,许多客户端同时发送请求,或者您需要 SSL 连接),请使用 Ice 之类的东西。我更喜欢 Ice 而不是 Corba,因为它更简单、更现代,而且和 Corba 一样好(也许更好)。

更新:在阅读了您的 cmets 之后,我真的建议您使用 Ice。 Ice 和 Corba 以及类似的技术称为 ORB(对象请求代理),它们不使用传统的服务器/客户端模型。因此,应用程序中的所有对象都可以相互通信。不管他们在哪里。在这种情况下,您将拥有一个真正的分布式应用程序。

【讨论】:

  • 感谢 Ice 的建议。我会探索它,但我想知道它会使系统太重吗?我看到安装程序的大小接近 160 MB。有没有在 python 和 java 之间运行良好的轻量级 ORB?
  • @Shyam:不客气 :) Ice 提供了很多您可能不需要的服务。它还包含您可能不会使用的 Java、CSharp、Ruby 等语言映射和库。所以,你只能选择一些你真正需要的轻量级库。例如,Ice 主库和 Python 模块。对于大型系统,Ice 确实是一个不错的选择。我们在拥有数千名客户的银行系统中使用它超过 2 年。
【解决方案2】:

你可以使用twisted,这没什么错,不过我推荐zeromq。它非常快,并且让编写联网应用程序变得非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2013-07-04
    相关资源
    最近更新 更多