SocketInputStream 分析

 

 

 

 

網絡層的拆包使用環形緩衝區,包由包頭+內容組成,每個包之間使用"$-$"做爲分隔符,包頭包括 PACKET ID,消息序列號,消息長度組成

在實際設計中,每個玩家關聯一個套接字,一個輸入緩衝區,一個輸入緩衝區,通過BOOL  ReadPacket( Packet* p ) ; 這個接口,從輸入緩衝區SocketInputStream中讀取數據,先取包頭,然後取包內容,通過在緩衝區中查找"$-$"來分隔每一個數據包。

消息都是以Packet爲基類,通過虛函數機制,找到對應的數據包,讀取數據。

值得一提的是,在使用環形緩衝接收數據包的時候,可以根據套接字讀取相關聯.首先計算環形緩衝區中還有多少可寫數據空間,從套接字中取多少數據並寫到緩衝區中;然後判斷套接字中數據是否已經讀完,然後讀取剩餘數據,並對緩衝區大小進行調節。

 

另外,數據包發送前也有次打包的過程,這樣適合於大量小數據包發送,這個由SocketOutputStream來處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章