99、Workerman通信框架-協議Text類解析

該協議類是採用\\n作為數據分割符。即一個協議包的格式為 數據\\n

Text類操作簡單。不足之處在於如果數據本身存在\\n字符,則會進行分割

1、Text類設計

在實現上,並不implements協議接口,只是按照其接口規範進行實現

  • 類概要圖
99、Workerman通信框架-協議Text類解析

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,這樣才構成一個協議包


分享到:


相關文章: