2009-04-20 125 views
4

我正在寫一個簡單的會計程序,由幾個C#winform客戶端和一個將數據讀取/寫入數據庫的java服務器應用程序組成。其中一個要求是所有的C#客戶端都應該從服務器接收更新。例如,如果用戶從他的C#客戶端創建一個新的發票,其他用戶應該從他們的客戶端看到這個新的發票。服務器應如何將數據推送到富客戶端

我的經驗主要是關於web開發,我不知道用C#的客戶端和Java servlet服務器滿足這個需求的最佳方式是什麼。

我最初的做法是使用Glassfish運行ActiveMQ並使用消息傳遞pub/sub方法,以便可以將更新推送到C#客戶端。我將創建不同的主題,如newInvoice,cancelInvoice等,以區分消息類型。每條消息都只包含以JSON編碼的對象。

但在我看來,這涉及到相當多的工作。鑑於我的用戶羣非常小(只有3或4個併發用戶),在我看來,應該有一些更簡單的解決方案。 (我不熟悉套接字編程:))

我知道這是客戶端服務器編程的101個問題,但如果有經驗的程序員可以指點我一些簡單的解決方案,那將是非常棒的。

回答

5

最簡單這裏的方法通常是簡單地使用輪詢 - 即讓客戶端每隔(您的時間間隔)查詢數據。這避免了一整套問題(防火牆,安全,視線,解決方案,客戶端跟蹤等)。

使用WCF,您可以在雙工通道上進行回調(允許服務器主動向客戶端發送消息),但這更復雜。我重視簡單性,所以我通常只是進行投票。

在這裏有幫助的技巧是設計系統具有查詢「自x以來的變化」的內置機制 - 例如,審計表,可能由數據庫觸發器提供。當然,每個項目的確切細節都有所不同。

另一個可能需要查看的選項是ADO.NET Sync Services;這可以做很多你所要求的,用於保持數據庫的本地副本與服務器保持同步 - 但是它有一些複雜性。這在「本地數據庫緩存」VS模板中可用(IIRC)。

0

而不是將信息從服務器推送到1:N客戶端,讓客戶端更頻繁地輪詢服務器以進行更新嗎?或者,當客戶端啓動並創建與服務器的連接時,服務器可以爲該客戶端連接動態生成一個新的Message Queue,然後客戶端可以輪詢更新?

0

有幾種推送技術可供您使用,如ActiveMQ(如您所述)或XMPP。但是,如果您只有3或4個客戶關心自己,那麼輪詢將是最簡單的解決方案。它不能很好地擴展,但在你的情況下這不是真正的問題,除非你的服務器是8086或者其他的東西)

0

你可能想看看StreamHub Push Server--它的一個流行的Comet服務器在Java中,.NET客戶端SDK用於從C#中的服務器接收更新。它還具有Java Client SDK和通常的Ajax/Comet Web瀏覽器支持,爲將來將數據推送到Web,Java和C#客戶端提供了更大的靈活性。

相關問題