如題
兩個問題
1.Socket send too fast
之前問過有關Socket的問題
不過後來抓出問題好像不在Socket的Connected判斷身上
而是當Socket重複送太快的時候
會造成錯誤然後Socket就斷線了
目前如果要送訊息,會把訊息Queue在Arrary裡面
然後以100ms去跑一個Timer
OnTimer內再用While迴圈去把所有Array的訊息都送出去
但好像只要連續送幾個訊息就會當了
就算是一來一往,只要區網速度太快也會造成一樣問題
這時候該用什麼方法解決比較好?
原本是想說在送一個訊息之後Delay幾ms
或者直接將幾ms內呼叫的Send指令給pass掉
但這些都不是我要的
有沒有辦法以最安全的方法,讓訊息能以可能的最快時間全部發送出去?
2.Timer overlap
這是另一個問題
一個主Thread裡面以100ms跑Timer
OnTimer內用foreach跑所有子物件的OnTimer
然後子物件的OnTimer內才會去處理所有各自的事情
原先以為,統一由主Thread去呼叫,可以避免多執行緒的交錯問題
結果卻發現還是有交錯
後來查詢跟實驗的結果,發現是Timer的Overlap問題
也就是說在還沒完成所有子物件的OnTimer之前
100ms就到了所以呼叫第二次的主Thread的OnTimer
然後就跑出了意外的結果
搜尋的結果
嘗試使用lock跟timer.stop跟timer.start
的確讓交錯問題消失了
但產生另一個問題是
當子物件數量一多,整個OnTimer的迴圈就變慢很多
造成主Thread無法以100ms穩定的跑
雖然說要做的事應該是需要堆疊完成才對
但不知道有沒有辦法讓主Thread要做的事穩定進行
然後子物件的OnTimer判斷獨立出來延遲?
還是說這樣的想法有根本上的錯誤?
實際上應該是要把兩個Timer分開?