2011-03-20 159 views
0

我有一臺服務器在我的的java web應用數據庫 服務器駐留。爪哇 - 如何從服務器發送通知到客戶端

現在我web應用程序的客戶有兩種類型 :

  • ClientType1
  • ClientType2

都可以訪問數據庫。

ClientType1將數據存儲在數據庫中。

ClientType2從數據庫中檢索數據。

ClientType1應該開始 數據庫 存儲數據時ClientType2開始

相若方式ClientType1應停止在數據庫中存儲 數據時的ClientType2停止

================== ================================================== =======

Q1。這個問題的解決方案是什麼?

  • 下面是我想的辦法:

  • 創建有一列,顯示狀態開始停止與此列的值應該由ClientType2設置的數據庫中的表ClientType1將繼續向數據庫發送查詢以從該表獲取狀態並根據狀態執行操作。

  • ClientType2應用ServerPush方法,通過該服務器將保持與ClientType1活着的連接,將請求發送給他,每當它接收到的命令(開始停止) 。這種方法的問題是,沒有。在服務器開放套接字的數量將隨着增加的數量而增加。的ClientType1

回答

0

我真的不考慮進程間通信通過一個數據庫是一個偉大的方法。典型的情況是,客戶端向服務器註冊,使其有資格使用基於套接字的機制接收消息。

客戶端可以然後:

  • 要求服務器代表它執行數據庫操作
  • 請求對數據庫的訪問

如果有許多客戶,保持開放連接將成爲一個問題,您可以在每次需要與服務器通信時發起新連接,或讓服務器提供服務器可以輪詢的某種REST API等。

+0

您能解釋一下「客戶端向服務器註冊自己」是什麼意思。 – 2011-03-20 11:50:13

+0

@Yatendra,即*客戶端*發起與*服務器*的聯繫,該服務器可以保留所有*客戶端*的隊列。該隊列可用於仲裁客戶端之間的數據庫訪問。例如,servern可以將'start'和'stop'命令依次發送給隊列中的客戶端。總之,您可以在網絡上應用「聽衆」概念。 – 2011-03-20 11:55:00

0

您應該爲此使用一種Ajax,因爲這會將「服務器可以調用客戶端」抽象出來。

選擇一個庫,允許您保持單個連接打開並通過此連接執行多項操作。

+0

我認爲一個開放的連接只能服務於一個客戶端。因此,對於許多客戶端來說,服務器需要保持打開各種連接(套接字),如果我們有很多客戶端,這些連接將不起作用。 – 2011-03-20 11:59:08

+0

當然,每個客戶端都需要自己的連接。這就是TCP/IP的工作原理。對於「許多客戶」的情況,您需要使用一個基於此類用法的底層Web服務器 - 請參閱http://en.wikipedia.org/wiki/C10k_problem - 以下是主要的Jetty開發人員對該問題的評論。 http://markmail.org/message/ulfklgftht7lhcqu – 2011-03-20 12:04:10

相關問題