2013-07-02 68 views
2

我們有一個服務器應用程序和兩個獨立的客戶端應用程序(兩個具有不同的功能 - 一個用於前臺,另一個用於後臺)。一切都是用Java編寫的。從另一個Java程序觸發功能

我們現在需要的是: 如果兩個應用程序都在運行 - 單擊一個應用程序中的按鈕 - >檢查其他應用程序是否已打開並觸發某些功能(顯示消息,打開框架)應用程序

如果其他應用程序未打開 - >它應該顯示一條消息說。

任何人都可以指出我在正確的方向來實現這一目標。我可以給出的最好的現實生活中的例子是:如何點擊Web瀏覽器中的iTunes鏈接打開iTunes應用程序(如果已安裝)以及相關的應用商店頁面。

編輯:我們的應用程序根本不處理網站。一切都使用Swing。

+0

IMO你需要......就像簡單的服務器客戶端應用程序。這意味着您必須編輯第一個應用程序才能通過網絡將數據發送到第二個應用程序,並且您還必須編輯第二個應用程序以捕捉和解析來自網絡的數據。 – Jakolcz

+0

這可能會幫助你http://docs.oracle.com/javase/tutorial/networking/sockets/ – Tala

+0

很大程度上取決於服務器能夠做什麼。假設你想從一臺PC發送消息到服務器,然後到下一個。這需要1-每臺PC可以向服務器註冊。 2-每臺PC都有某種回調機制,可以讓服務器發送消息回到客戶端。 3-服務器能夠提供連接的客戶端列表。所有這一切都取決於你如何與服務器通信 – MadProgrammer

回答

5

實現應用程序間通信沒有「最佳」方式,但有很多方法;最好的一個將是最適合你的環境中的一個:網絡環境,防火牆,呼叫次數,同步和一步,等...

通信通常採用兩種實現:

  • 遠程過程調用:一個應用程序基本上調用另一個應用程序的函數/方法並傳遞參數。 RPC通常是同步的:響應在同一通信/事務中發送
  • 消息:應用程序將消息發送到其他應用程序,可能會與其他消息一起回覆。消息通常是異步的。 兩者之間的邊界可能與REST等一些協議相當模糊。

在Java領域,通常使用實現

  • RPC任

    • RMI:爪哇唯一的解決辦法;易於實施;不太喜歡firwalls。
    • SOAP Web services:不是以Java爲中心的;很難實施;充滿了陷阱;網絡友好。
  • 消息可以使用實現

    • JMS:Java的唯一;相當容易實現但是異步;在高負載下非常強大
    • JSON/XML HTTP/s消息:這裏有很多協議,從最安全的AS2到RNIF,普通的XML/Json POST等等......這些是網絡和語言不可知的,但總是需要一些工作執行。

的混合方法是REST這已成爲非常流行由於易於實現和網絡友好性的好處,但有沒有很正式的缺點。這是一種技術而不是規範。我會看看JAX-RS以及像RestletJersey這樣的框架來幫助您入門。

(編輯) 我特意沒有提到用Java套接字開發自己的。 IO根據定義是不純的並且通常是多線程的:IO很難正確。如果你真的堅持走下去,至少應該使用像Apache Mina或Netty這樣的合適框架。

+0

我喜歡這個答案中提出的多方法。根據功能需要,您也可以添加JMX。我們將它用於監控項目,性能管理,有限功能觸發(啓動/停止組件...) – Grimmy

+0

感謝您對BGR的詳細響應。我們實際上已經在使用JMS(activeMQ)將更新從服務器傳遞到客戶端。猜猜現有的基礎架構可以被重用來通過JMS在客戶端之間傳遞消息。 –