Python和Jython(JAVA)应用程序之间的网络通信

4
我将开发一个基于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)?在客户端和服务器之间不能丢失任何信息是否至关重要(例如金融数据)?局域网还是互联网? - andrew cooke
@andrew - 数据访问将采用推拉两种方式。客户端可以有很多(商业部署的情况下甚至可能达到数千个),但我可以选择为每个客户端单独设置服务器应用程序实例。数据传输量不会超过几百KB,但每隔几个小时就会发生一次(从服务器推送)。 - Shyam
@andrew - 客户端响应能力非常重要,因为在某些情况下,它将不得不在交互之间发送和接收信息(拉取)。最初消息很少,但随着应用程序的增长,这也会增加。为了安全起见,最初为了原型设计,我可以使用非安全方式,但后来为了商业化,我将不得不采用类似ssl的东西。数据丢失并不是真正关键的问题,因为它可以从服务器应用程序中再次检索。服务器和客户端通信将通过互联网进行。 - Shyam
2个回答

2

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

如果客户端很少,而且您不想涉及复杂的技术,请使用类似JsonRPC或XMLRPC的东西。(请注意,Pyro只能在服务器和客户端都用Python编写时使用。如果您计划以后转到Java,您应该考虑这一点。)

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

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


感谢关于Ice的建议。我会去探索它,但是我想知道它会不会使系统过于沉重?我看到安装程序的大小近160 MB。是否有适用于Python和Java之间轻量级且能够良好工作的ORB呢? - Shyam
@Shyam:不用谢 :) Ice提供了许多服务,您可能并不需要。它还包含语言映射和Java、CSharp、Ruby等库,您可能不会使用。因此,您只能选择一些您真正需要的轻型库。例如,Ice主要库和Python模块。对于大型系统,Ice确实是一个很好的选择。我们在一个银行系统上使用它已经超过2年了,拥有数千个客户端。 - Aidin

0
你可以使用twisted,没有什么问题,但我更推荐zeromq。它非常快速,而且让编写网络应用变得非常简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接