各位前輩好,想請教關於Server以及data處理的問題。
目前我想做的事情是建立一個Server供多個Client連線並且進行不間斷的data傳遞。
收到data後解析封包並將資訊顯示在Form的listbox上。
我現階段的架構是使用MVC,Form裡有一個Form controller。Controller內部包含一個
Server。
Server是以同步和多執行緒來實做。每個連進來的client都是一個執行緒在處理receive
後的資料。server還有收到data的event供controller觀察,以及n個queue來存放n個
client傳來的heartbeat。
Server收到data後會解析類型並且讀取需要的長度存入byte[]。接著利用事件invoke
將此byte[]傳出給controller。controller將此byte[]處理後保存至記憶體。並且也
invoke事件讓form去更新UI畫面。而若是收到heartbeat則加入該對應的queue中。
由server內部自己一條背景執行緒來回應。
每個Client傳遞給Server的資料量約是2MB/s。目前遇到的問題是當client變多時,
heartbeat回應給client的時間間隔就會越來越長。最終導致client端timeout而斷線。
若無heartbeat機制也會因為server端的buffer越積越多而爆掉。
是否因為我在server就將資料分析並且每取得一筆資料都invoke一次而導致處理慢了?
有想過是否要將server端receive出來的資料直接丟給controller去處理就好,但這樣
會不會變成是controller中的buffer爆掉?
這是第一次做server和client的東西,不知道該如何做會比較好。希望前輩能指點一下。
如果敘述很難理解需要我的程式碼,我也可以貼出來,非常感謝!