2

我们有一个服务器应用程序和两个独立的客户端应用程序(都具有不同的功能 - 一个用于前台,另一个用于后台)。一切都是用 Java 编写的。

我们现在需要什么:如果两个应用程序都在运行 - 单击一个应用程序中的按钮 -> 检查另一个应用程序是否已打开并在该应用程序上触发某些功能(显示消息,打开框架)

如果其他应用程序未打开 -> 它应该显示一条消息说这样。

谁能指出我实现这一目标的正确方向。我能给出的最好的现实生活示例是:单击网络浏览器中的 iTunes 链接如何打开 iTunes 应用程序(如果已安装)以及相关的应用商店页面。

编辑:我们的应用程序根本不处理网站。一切都使用 Swing。

4

1 回答 1

5

实现应用间通信没有“最佳”方式,但有很多方式;最好的将是最适合您环境的:网络条件、防火墙、调用次数、同步与异步等……

通常使用以下任一方式实现通信:

  • 远程过程调用:一个应用程序基本上调用另一个应用程序上的函数/方法并传递参数。RPC 通常是同步的:响应在同一个通信/事务中发送
  • 消息传递:一个应用程序向另一个应用程序发送消息,该应用程序可能会回复其他消息。消息传递通常是异步的。对于 REST 等一些协议,两者之间的界限可能非常模糊。

在 Java 世界中,

  • RPC 通常使用以下任一方式实现

    • RMI:仅 Java 解决方案;易于实施;不太喜欢防火墙。
    • SOAP Web 服务:不以 Java 为中心;难以实施;充满陷阱;网络友好。
  • 消息传递可以使用

    • JMS:仅限 Java;相当容易实现但异步;在高负载下非常强大
    • JSON/XML HTTP/s 消息传递:这里有许多协议,从最安全的AS2到 RNIF、纯 XML/Json POST 等……这些与网络和语言无关,但总是需要一些工作才能实现。

一种混合方法是REST,由于易于实现和网络友好性的优点,它变得非常流行,但也有不太正式的缺点。它是一种技术,而不是一种规范。我会查看有关JAX-RS和RestletJersey等框架的文档以帮助您入门。

(编辑)我故意没有提到用 Java 套接字开发你自己的。IO 根据定义是不纯的并且通常是多线程的:IO很难正确处理。如果你真的坚持要走这条路,至少,请使用适当的框架,如 Apache Mina 或 Netty。

于 2013-07-02T07:57:10.767 回答