我現在在做一個機器設備運轉狀態采集的軟體,一個服務端負責采集設備的運轉狀態存盤到資料庫里,然后會有多個客戶端(因為會有很多人使用),客戶端負責實時顯示設備的運轉狀態。現在的做法是在客戶端里使用SqlDependency來監聽資料庫是否有更新,更新則獲取資料進行顯示,但是碰到的問題是如果同時有多個客戶端在運行的話和錄入資料過于頻繁時,使用SqlDependency的方式,客戶端的資料就不能及時的重繪,或者資料出錯。有大神能提供什么好的想法解決這一問題嗎。在網上找了下有通過觸發器來做,還有就是服務器與客戶端通過socket來通信,但這樣感覺服務器壓力太大。各位有什么好的想法嗎,提點提點唄
uj5u.com熱心網友回復:
你錯了..socket才是壓力最小的方式.而且你現在的功能 跟資料庫沒關系.
開發服務端 負責資料的接收與轉發.
客戶端連接之后 服務端自動把上來的資料做轉發 實時性非常強..這才是最佳的解決方案..
uj5u.com熱心網友回復:
你的意思是,服務端一方面和是設備連接采集資料,另一方面也和客戶端連接直接將資料發給客戶端嗎?資料我也是要存進資料庫的用來做其他的功能。現在就是客戶端通過什么樣的方式獲取資料實時顯示,而且資料不出錯比較高效穩定uj5u.com熱心網友回復:
比如說你做一個網游,比如說傳奇吧,你能畫出比較好的原畫,你能把資料模型做得很好,但是你跟投資商說“客戶端把游戲操作保存到資料庫里,服務器和其它客戶端去查詢資料庫表”,那么投資商立刻就走了!因為網路軟體不能糾結資料庫表。資料固然是可以、甚至也比要保存到資料庫的。但是開發網路軟體,要獲得競爭優勢,當然是看你會不會通訊,而不是看會不會查詢資料庫。
uj5u.com熱心網友回復:
就聯網拓撲形式上來說,可能你的服務器通過某種形式跟設備連,各個客戶端通過互聯網(或者局域網,至少是多層NAT路由器之后的局域網)連到服務器。然后你需要當設備狀態有某些改動時,相關的客戶端都收到指令來快速、輕量級地重繪(就好象成擺上錢游戲客戶端重繪界面,可并不是什么增刪改查游戲服務器的資料庫表的結果)。設計這類系統的第一層,入門時,說通訊技術,而首先時屏蔽了用沒有用資料庫、用幾個資料庫等等問題。uj5u.com熱心網友回復:
我的服務端是通過Socket與設備通信的,所以按照你的說法,想做這種客戶端的話,一般盡量不要去和資料庫進行對接,資料庫只做資料的存盤和管理功能,客戶端和服務端直接通信是比較好的方式嗎?uj5u.com熱心網友回復:
把采集到的資料整理后存入資料庫,這個做法本身并無問題,而且是正確的顯示終端只需定時從資料庫獲取最新資料即可(10幀/秒就可以了,又不是看電影)
實時是相對的概念,最好的殲擊機飛行員的即時反應速度(從發現目標到做出正確應對的時間)也就 0.1~0.15秒,普通人是根本達不到的。
所以如果真出現了災難性苗頭,是要由你在系統中預設的應急程式處理的,而不是靠人工規避
uj5u.com熱心網友回復:
實時顯示需要服務器主動推送訊息,可以用signalr這個框架uj5u.com熱心網友回復:
用socket比較合適,客戶端連接之后 服務端自動把上來的資料做轉發 實時性非常強..uj5u.com熱心網友回復:
樓主,你解決了嘛,目前我也遇到這種情況,求分享一下經驗咯轉載請註明出處,本文鏈接:https://www.uj5u.com/net/193179.html
標籤:C#
上一篇:資料庫VS
下一篇:C#可以呼叫Mask的API嗎
