我有一台服務器,運行用c#寫的程序通過串口連接設備實時采集數據。
我希望從其他任何電腦利用客戶端程序實時動態的顯示服務器上采集的數據。
如果用數據庫實現的話,客戶端程序不方便判斷哪些數據是新數據,而且效率也很低。
於是想用Socket實現。本人小白啦,對Socket只是有耳聞而已。
在網上查了查資料,好像基本上就是兩種模式。
1.Socket廣播。 我的理解就是服務器向網內廣播地址發送一條消息,路由器會在網內自動轉發。網內的客戶端被動的接收消息,刷新數據就可以了。
2.服務器打開並監聽端口,被動接收客戶端的請求,再響應。
但是第一種的做法,我擔心當數據采集頻率較高,或未來有多台以此種方式實現的服務器時,大量的廣播信息會不會對網絡造成負擔。而且我們公司的內網是多個網段,用多台三層交換機連接到一起的。雖然IP互相都能Ping通,但是不知道廣播數據能否轉發到其他網段。而且廣播貌似用UDP協議,看網上的解釋,好像這種協議不能保證數據的先後,但我需要客戶端就像心電圖一樣,顯示一個連續的波形。第二種做法的話,需要客戶端不停的發送請求,當客戶端請求的頻率和數據采集的頻率不一致時,服務器端還要考慮是否已給給此客戶端發送過最新的數據。而且當客戶端數量較多的時候,會不會對服務器端程序造成壓力,影響數據采集進程。
我理想的模式就是,服務器采集到數據之後,直接將數據發送到某個端口。客戶端監聽服務器的端口,當服務器端口數據有變化時,就將數據獲取並顯示出來。
看起來和上面第一種模式有些類似。但是我不希望廣播,是通過客戶端監聽實現。
使用HTTP協議, HTTP長連接可以很好解決你的問題,不過技術上有些難