繁体   English   中英

Java EE,通信Web应用程序和桌面应用程序

[英]Java EE, communication Web app and Desktop app

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

开发这个的最佳方法是什么? 我考虑过一些选择:

  • 套接字:我读过多篇你不应该在Web应用程序上使用套接字的帖子。
  • 肥皂:我可以在Web应用程序上设置服务器,但不在桌面应用程序上。
  • JCA适配器:我对此没有任何了解。

Web应用程序

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

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

DesktopApp

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

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

你是对的是套接字,它们很容易使用,但许多网络阻塞简单的TCP套接字并且只允许HTTP,有时只允许通过HTTP代理。

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

但是,有一些方法可用于克服此限制:

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

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

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

您应该对每种方法进行一些研究,并根据您的情况选择合适的方法。

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM