TCP粘包處理 參考spserver,tcpspserver
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沒有問題。