該協議類是採用\\n作為數據分割符。即一個協議包的格式為 數據\\n
Text類操作簡單。不足之處在於如果數據本身存在\\n字符,則會進行分割
1、Text類設計
在實現上,並不implements協議接口,只是按照其接口規範進行實現
- 類概要圖
2、核心方法解析
2.1、encode
該靜態方法接收參數$buffer
把參數與字符\\n進行拼接
然後返回
2.2、decode
該靜態方法接收參數$buffer
調用函數rtrim去掉$buffer參數中的\\r\\n字符
然後返回
2.3、input
該靜態方法接收參數$buffer和傳輸層$connection對象
判斷參數$buffer的長度與對象的屬性maxPackageSize的關係,如果大於則認為是非法,關閉連接。並返回0
調用strpos,查找字符\\n在$buffer的首次出現的位置$pos,如不存在則返回0,相反則返回位置$pos+1,作為一個協議包的長度
3、問題
調用Text類的方法input,最終返回的長度是位置$pos+1?
假設接收到的參數數據為hello\\nworld\\n
當調用strpos函數查找字符\\n的位置時,是不包含\\n本身的,因此需要+1,這樣才構成一個協議包
閱讀更多 iamasb 的文章