小弟使用C# .NET7.0做個TCP Socket Server(使用linq2db),想取代原本使用的舊程式
我們在外面有一些設備,每30秒左右會傳一筆資料回來,Server處理後寫到資料庫中。目前是每個設備一個connection,每次收到資料就執行一次寫入
我測了一下insert,穩定後每次大概在5ms-15ms間,以前沒量過,這個速度有在平均範圍嗎?資料量不到300Byte,目前也只寫入1個表,十幾個欄位而已
以這個速度,每秒能同時處理的設備還不到100台,感覺好像有點弱…。
雖然設備不同在同一時間回傳,在分散的情況下應該問題不大。
我想到一些可能的改善方式,主要就是多收集幾筆資料後再一次寫入資料庫,比如:
因為設備數大概也就幾百個,目前問題應該不大,但想看看有沒有更好的處理方式
請問各位先進這種情況一般是怎麼處理,才能使處理效能改善?
改寫成API REST,另,SQL執行盡可能使用帶async字尾的方式執行,避免前後端等待時間過長,會timeout
感謝提示,但因為設備數量不多,目前Socket Server程式與DB在同一個主機上,這樣加一個後端API的話還多了http request,對效能可能沒什麼幫助?
但iis或nginx或node.js至少都會做執行緒分流,估且不管他們怎麼做,都至少比自己背sockets卻不知怎麼面對突然來的連接,少還好講,幾千個出現,你有何應對?做個多工緩衝池(spool)來接受連接並記錄需要做的工作,以先進先出的方式一個個處理掉(寫多執行緒或另寫程序解決),而不是一收到socket連接請求就馬上處理工作,別的連接就只能等或是直接timeout~
了解,感謝提示
最近也寫些網頁,也有分前後端,但沒想到Socket程式的資料庫操作也可這樣處理~