- 4用戶推出相同的客戶端程序(的WinForms)的單獨的實例是基於待辦事項列表連接到數據庫。
- 第一個用戶選擇第三個任務列表項目。
如何更新/刷新其他3個用戶屏幕以反映該項目#3不再可用?
我的想法是一張包含上次更新日期時間戳的表。然後一個計時器會每隔幾秒檢查一次,看看是否有任何變化。
UPDATE1:
感謝所有 - 肯定有許多有效的答案。
我去了Icemanind推薦的場景的簡單版本。
如何更新/刷新其他3個用戶屏幕以反映該項目#3不再可用?
我的想法是一張包含上次更新日期時間戳的表。然後一個計時器會每隔幾秒檢查一次,看看是否有任何變化。
UPDATE1:
感謝所有 - 肯定有許多有效的答案。
我去了Icemanind推薦的場景的簡單版本。
是的。做到這一點的最好方法是實施「推」式系統。這是如何工作的。每當有人點擊客戶端上的某些內容時,客戶端就會向服務器發送消息。服務器需要接收此信號,然後服務器會向連接到服務器的所有客戶端發送刷新消息。
我不知道您的客戶端或服務器是否已編碼,但您需要在服務器上創建一個線程,以「偵聽」來自客戶端的傳入消息,一旦它接收到消息,將其放入隊列中,收聽更多消息的回報。服務器上的第二個線程需要處理隊列中的消息。
在客戶端,您還需要第二個線程來偵聽來自服務器的傳入消息。收到消息後,它可以處理消息並採取任何必要的操作。
客戶端/服務器和套接字編程上一個相當不錯的教程可以在這裏找到:http://www.codeproject.com/KB/IP/serversocket.aspx
當然,這是一個指導。您需要根據需要對其進行修改。
希望這是有道理的,祝你好運!
您可以實施「推送」系統,當1位用戶更新某些內容時,服務器會向所有連接的客戶端發送更新消息。
我會選擇項目上的isDirty時間戳/標誌。無需再次獲取所有項目,也無需創建困難的推送系統。重新閱讀自上次通話以來的所有項目。
由於盧卡斯建議你可以實現一個'推'風格的系統,每當一個實體被修改它'推'給其他連接的用戶。這可能有點複雜。使用遺留系統處理這種情況的方式是通過「更改編號」列,但實際上它可以是每次記錄修改時更新的任何內容。
當用戶試圖修改一個實體時,我們查詢數據庫以鎖定該實體,其中「更改號碼」反映了用戶當前擁有的「更改號碼」。
如果鎖定成功,用戶可以更新/刪除實體。完成後,實體上的「保存/提交」和「更改號碼」會增加。
如果他們未能獲得行鎖並且「更改號碼」相同,我們會顯示一條消息,指出他們請求的實體正在被另一個用戶使用。如果「更改號碼」不同,則該消息表示他們必須刷新其視圖。
如果您使用SQL Server作爲您的存儲,並使用ADO.NET或其他數據訪問的頂級應用程序,則還應該檢查SQL依賴關係。
基本上,您可以從表創建查詢,並且您可以指示SQL Server通知您該查詢結果中的任何數據是否更改。
參見專題一些介紹文章:
它需要一些初始的設置工作,但優勢巨大這裏是:你會在什麼時候自動通知您感興趣的部分(這是您的查詢結果集的的一部分)更改,您可以對此做出反應。沒有混亂的投票或任何東西....
知道什麼時候你想讓你的用戶接收更新/刷新很重要。你需要立即或延遲更新嗎?用戶是否正在處理相同的數據部分? 例如,如果您有數千個對象,並且您正在處理實體1,那麼立即知道實體959剛剛更改或僅當您嘗試自己修改959時很重要嗎? 根據這些要求,您可以像在我的回答中一樣使用被動模式,也可以像其他人推薦的那樣使用更加活躍的「推送」系統。 – Matthew 2010-07-22 18:12:04
什麼數據庫以及您如何從該數據庫中讀取? – 2010-07-22 18:17:24
@marc_s - >數據庫現在是MySQL。 – 2010-07-22 19:05:30