3

我有 Java Server Faces Web 应用程序,它需要在网络机器上的桌面应用程序中调用一个方法。这台机器将在特定机器上执行一些逻辑。完成后,它应该调用 Web 应用程序上的一个方法来报告其状态。两种方法都是void's,但确实需要参数。

开发它的最佳方法是什么?我考虑了一些选择:

  • Sockets:我已经阅读了多篇关于您不应该在 Web 应用程序上使用 Sockets 的文章。
  • Soap:我可以在 Web 应用程序上设置服务器,但不能在桌面应用程序上。
  • JCA 适配器:我对此一无所知。

网络应用

    class WebAppClient {
        public void start(String x, List<String> y) {
            // Call DesktopServer.start(x, y);
        }
    }

    interface WebAppServer {
        public void reportBack(String info);
    }

桌面应用

    class DesktopClient
        public void reportBack(String info) {
            // Call WebAppServer.reportBack(info);
        }
    }

    interface DesktopServer {
        public void start(String x, List<String> y);
    }
4

1 回答 1

0

您对套接字是正确的,它们使用简单,但许多网络阻止简单的 TCP 套接字,只允许 HTTP,有时只允许通过 HTTP 代理。

HTTP 是可行的方法,但 HTTP 不允许服务器发起对话,它迫使您在请求响应模型中工作。

但是,有一些方法可以用来克服这个限制:

  • 简单轮询:您只需定期轮询服务器以了解您是否收到新消息。

  • 长轮询:您轮询服务器,但请求保持打开状态,直到服务器有话要说,这也称为“彗星”协议,那里有像码头这样的实现。

  • websockets:html5的一个特性,顾名思义,通过http提供了一个真正的双向套接字。尚不支持所有网络设置。例如,某些代理会阻止它。

您应该对每种方法进行一些研究,并为您的案例选择正确的方法。

祝你好运。

于 2012-12-17T03:24:11.590 回答