TCP粘包處理 參考spserver

TCP粘包出現的緣由就不在詳細描述了。TCP粘包是在作TCP編程時常常會遇到的問題,網上相關的參考也很多,大都都是一個熱心人士編寫的,
若僅用於學習就算了,若用真正用於項目還有待考慮。
本文就簡述一下如何利用spserver處理粘包問題。SPserver的性能有多好我也不說了。(嘎嘎)
處理思路以下:
1.SP_MultiLineMsgDecoder中的decoder是用於分解包,固然分解的原來是使用‘\n’.咱們利用該函數的原來分包。
2.SP_CircleQueue * mQueue; 用於存儲分解後的包。
3.SP_Buffer 用於存儲收到的報文。
4.那如何讀取包呢? spwin32buffer_read( getEvBuffer( session->getInBuffer() ), mFd, -1 ); 在該函數內部,使它使用了itcl判斷報文的數量,而後在SP_Buffer分配對應的空間,
分配函數爲if (spwin32buffer_expand(buf, howmuch) == -1)
5.須要注意的是解包時,須要將完整的包讀至SP_CircleQueue中,調用函數爲spwin32buffer_remove。
寫完速度測試徹底對應 echoServer沒有問題。
相關文章
相關標籤/搜索