[問題] Socket server 資料處理問題

看板C_Sharp (C#)作者 (哈哈龍)時間9年前 (2015/09/05 17:16), 編輯推噓0(0011)
留言11則, 3人參與, 最新討論串1/1
各位前輩好,想請教關於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的東西,不知道該如何做會比較好。希望前輩能指點一下。 如果敘述很難理解需要我的程式碼,我也可以貼出來,非常感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.8.75.51 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1441444597.A.561.html

09/05 18:24, , 1F
請在server中測量接受到回傳總共需要的時間
09/05 18:24, 1F

09/05 21:01, , 2F
有沒有考慮用SignalR 這樣不用自己重新發明輪子
09/05 21:01, 2F

09/05 21:02, , 3F
如果要自己刻的話 要用非同步 IIS的執行緒才不會卡住
09/05 21:02, 3F

09/05 21:59, , 4F
除非你的server要主動通知client,不然我覺得用http就好了
09/05 21:59, 4F

09/10 23:49, , 5F
感謝各位,後來我用了非同步server以及非同步invoke
09/10 23:49, 5F

09/10 23:50, , 6F
後就改善了,Litfal你好,我也需要主動發data給clie
09/10 23:50, 6F

09/10 23:51, , 7F
nt,所以還是用了socket。另外我查了一下SignalR和
09/10 23:51, 7F

09/10 23:55, , 8F
IIS好像是網頁用的東西?我是用windows form也行嗎
09/10 23:55, 8F

09/12 21:31, , 9F

09/12 21:32, , 10F
winform也可以用
09/12 21:32, 10F

09/13 11:07, , 11F
感謝您,我再研究一下
09/13 11:07, 11F
文章代碼(AID): #1LwhBrLX (C_Sharp)
文章代碼(AID): #1LwhBrLX (C_Sharp)