【问题标题】:How to make my Java Swing application a Client-Server application?如何使我的 Java Swing 应用程序成为客户端-服务器应用程序?
【发布时间】:2010-05-06 19:19:42
【问题描述】:

我制作了一个 Java Swing 应用程序。现在我想让它成为一个客户端-服务器应用程序。当服务器上的数据发生更改时,应该通知所有客户端,所以我不是在寻找 Web 服务。 Client-Server 应用程序将在单个 LAN 上运行,它是一个业务应用程序。服务器将包含一个数据库 JavaDB。

什么技术和库最容易上手?我应该使用 Sockets 从头开始​​实现它,还是应该使用 Java RMI 或 JMS?还是有其他更容易开始的替代方案?

还有我应该使用的服务器库吗?码头是替代品吗?

【问题讨论】:

    标签: java swing networking client-server distributed-system


    【解决方案1】:

    鉴于您已经拥有该应用程序,也许最简单的做法是确定您在客户端和服务器之间所需的接口,首先重构您的应用程序以使用该接口在后端之间进行通信/front-end 在同一个进程中

    然后你就可以开始拆分了。一个简单的解决方案是使用 RMI 将其分开(因为您正在谈论 Java 对象并具有 Java 方法调用)。 Spring 包含有用的工具来简化/自动化接口的 RMI 暴露。

    对于通知要求,一个简单的 UDP 多播(或广播)就足够了。

    请注意,一旦您拆分应用程序,您就会遇到问题。维护一致的数据视图,管理及时的更新,处理服务器宕机时的情况,当你有很多客户端时可能出现的加载问题等等。从某种意义上说,将应用程序拆分为客户端和服务器只是新架构的开始过程。

    【讨论】:

      【解决方案2】:

      Mina 作为网络应用程序框架是一个不错的选择,用于为此目的构建一个简单的服务器 - 它比使用原始套接字要好得多。

      http://mina.apache.org/

      如果你真的需要一个应用服务器,那么你可以看看 JBoss。它还提供了一个远程组件(作为 Mina 之类的替代品):

      http://www.jboss.org/jbossremoting

      您可能对 Enterprise Java Beans 的需求不大。在大多数情况下,一个简单的基于 POJO 的框架就足够了 - 您可以将它与一个依赖注入框架(例如 Guice)结合在一起:

      http://code.google.com/p/google-guice/

      春天。保持简单,除非您确实需要,否则不要使用 J2EE 服务器。希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        这是 J2EE 所做的大部分工作,但它是一个全新的学习曲线,因为它们已经预先解决了您将遇到的许多问题,而许多您可能不会遇到,因此添加了许多新技术。

        但在最基本的情况下,J2EE 只是回答了这个问题。

        【讨论】:

        • 我明白了,我以前从未使用过 J2EE。但我认为现在是时候这样做了;)谢谢。如果没有任何轻量级的解决方案。
        • 有很多轻量级的解决方案,但是您会遇到并解决许多 J2EE 已经遇到并解决的问题。我建议至少阅读一个足以了解所有特性的免费 J2EE 框架——这样您可能会注意到您将遇到的潜在问题,这些问题可能已经解决了。如果您真的仍然感到安全,请使用 RMI。 J2EE 提供(几乎是免费的)冗余服务器和故障转移,保证消息传递和其他东西,如果你以后决定想要的话,这些东西真的很难得到。
        • Java EE 的问题在于,除了解决您的问题之外,它还解决了您没有的大量问题,但却使您面临这些问题。
        • @Ryan 好像您正在使用不应该成为问题的最新工具。我认为您谈论的大多数问题都是配置问题,使用新工具应该很容易,而不是过多的混合和匹配。在最近的版本中,许多其他问题已经消失(Beans 更容易使用等),但如果您有不同的经历,我真的很好奇您在哪里遇到了问题。
        • @BillK 基本上有很多东西要学,而且通常最终会矫枉过正。您确实需要了解 Java EE 的工作原理才能使用它,但由于强大的功能和灵活性,它很复杂。它会做一些你可能不关心的事情,比如集群。当您甚至不知道您的选择是什么时,很难决定您需要什么 - 因此您最终会整理(并尝试)一些 Java EE 技术,然后才能决定使用哪些技术。然后有一堆自称优越的竞争技术,所以你最终也要调查它们。
        【解决方案4】:

        我曾在这样的项目中工作。我们使用 J2EE 实现了客户端 Swing 和服务器端。我们使用了 EJB、Stateless bean 和 Message Driven Beans。我也参与过一个设备跟踪、管理项目。我们的客户是卡车+Swing 用户,我们使用 Servets+TCP/UDP、Apache Mina 框架来处理和保持连接。

        【讨论】:

          【解决方案5】:

          我从事 Java Swing 客户端/服务器应用程序已经将近 3 年了。我建议您选择 RMI/EJB。我们开发的初始应用程序是使用 RMI/EJB 进行此操作的客户端与服务器之间的通信,而 WebLogic 是服务器。

          但我们后来发现应用程序中包含许多“类似浏览器”的功能,例如会话超时等,因此,我们使用了 BrightSide 框架,它通过 HTTP 包装了 RMI 调用。我们所做的另一项改进是我们用开源 JBoss 服务器替换了 Weblogic。

          使用 HTTP 封装调用将变得非常方便,您可以使您的 Swing 应用程序变得非常丰富。稍后,当情况要求您严格使用网站时,您可以使用jnlp 部署您的挥杆。

          希望这会有所帮助。

          【讨论】:

          • 但是使用 HTTP,我无法推送通知!?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-17
          相关资源
          最近更新 更多