【问题标题】:Server-client Java distributed application服务器-客户端 Java 分布式应用程序
【发布时间】:2009-10-14 14:26:00
【问题描述】:

我必须设计一个由一台服务器(用 Java 开发)和一个或多个远程 GUI 客户端(带有 windows 的 Swing 应用程序)组成的分布式应用程序。

如前所述,客户端是可以连接到服务器以接收和发送数据的 Swing GUI 应用程序。 通信是双向的(服务器 客户端)。 通过网络发送的数据主要由我的域逻辑对象组成。

两个简单的例子:客户端调用服务器以接收数据以填充窗口内的表格;服务器调用客户端以发送数据以刷新特定的小部件(如按钮)。

服务器和客户端之间传输的数据量和网络调用的频率并不是特别高。

您建议我使用哪种技术进行服务器-客户端通信?

我想到了一种适合我的技术,但我想知道您的意见。

非常感谢。

【问题讨论】:

    标签: java swing network-programming distributed


    【解决方案1】:

    我想到的第一个技术是 RMI——适用于 Java 客户端和 Java 服务器之间的通信。但是,如果您想将客户端技术切换为 Web 界面,您可能会遇到困难。

    【讨论】:

    • 感谢您的回答。其实我想到的技术就是RMI。我认为将来不会在 Web 界面中更改客户端(Swing 技术就足够了)。那么除了这一点之外,您认为采用 RMI 可能还有其他缺点吗?
    • 说实话,我已经很久没有使用RMI了。 “长”是2年的意思。我现在经常使用的是带有 Apache CXF 的 SOAP——如果您要发送巨大的对象图,这可能不是最佳选择。然而,我用 RMI 做的东西效果很好(我曾经在 PDA 和工作站之间同步数据)。
    • 事实上,通过网络发送的用于服务器-客户端通信的数据是由域对象组成的。有时这些对象可以是“简单的”(例如只有一个对象有两个整数和一个字符串)或“复杂的”(服务器发送给客户端的许多对象的列表)。显然,这些对象的实现对服务器和客户端都是可见的。
    【解决方案2】:

    我会选择 RMI,但使用 Spring 框架实现整个架构。这样它就可以独立于所使用的技术,并且可以切换到其他通信方式(例如 HTTP 或其他),几乎无需编码。

    更新:Spring 将允许您没有任何 RMI 特定代码。

    【讨论】:

      【解决方案3】:

      我相信套接字应该可以解决问题。它们很灵活,编码/维护也不是特别难。大多数入门级程序员也应该能够维护它们。它们速度也很快,可以适应任何环境。

      除非您的服务器将不在现场,或者您预计会有防火墙问题。在这种情况下,Web 服务是可行的方法,因为您的基本通信是通过端口 80 进行的。

      【讨论】:

      • 感谢您的回答。我认为套接字也是一种简单的网络通信方式。但是,您在套接字上写入和读取域对象的努力又如何呢?可以忽略不计吗? “场外”是什么意思?我认为该服务器将放置在专用 LAN 中,并且可以从安装了我的 Swing 应用程序的任何远程主机访问(需要软件身份验证/登录)。
      • 如果你想发送域对象,我同意 RMI 是一个更好的选择。我必须承认,我的第一个想法从来都不是 RMI,但是对于 Java 客户端和服务器,它可能是一个更好的选择。异地我的意思是服务器在互联网上的某个地方,而您的客户在网络中。看起来这不会发生。
      • 感谢您的评论。可能(正如 msparer 和您所建议的那样)我将采用 RMI 进行服务器-客户端通信。
      【解决方案4】:

      我会同意 msparer 对 RMI 的建议,但我只会使用 EJB3(它使用 RMI 作为通信协议)。 EJB3 非常简单,即使您不使用 EJB 为您提供的其他功能(例如安全性),您仍然可以利用容器管理事务 (CMT)。它确实使开发变得容易。

      至于服务器->客户端通信,您可能希望使用 JMS。同样,使用 EJB3,这对于注释来说非常简单。客户端将订阅消息服务并从服务器接收更新通知。

      是的,我目前正在开发一个可以执行此操作的应用程序。不幸的是,我们使用的是 EJB2.1。不过,我认为这才是 EJB 真正闪耀的地方。在 Web 应用程序中使用 EJB 通常是多余的,但在分布式客户端/服务器应用程序中它们工作得很好。

      【讨论】:

        【解决方案5】:

        您可以尝试使用 ICE http://www.zeroc.com 建立服务器-客户端连接。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多