心血來潮想弄一下workerman 從composer安裝了擴(kuò)展"workerman/workerman": "^3.5"
在一通瞎雞兒鼓搗之后卡住了?
public function onMessage($connection, $data)
這個方法成功的困擾了我三四天[attach]2309[/attach]
當(dāng)我點(diǎn)擊按鈕 發(fā)送aaaa的時候??
[attach]2313[/attach]
onMessage()方法會隨機(jī)出現(xiàn)三種結(jié)果
結(jié)果一 沒反應(yīng)
[attach]2310[/attach]
結(jié)果二 正確輸出aaaa
[attach]2312[/attach]
結(jié)果三 輸出亂碼
[attach]2314[/attach]
?
反復(fù)嘗試了n邊之后找到了規(guī)律
亂碼只會出現(xiàn)在沒有反應(yīng)之后
就相當(dāng)于擲硬幣
第一次
? ? 要么沒反應(yīng) 要么獲取到aaaa
如果是沒反應(yīng)
? ? 則第二三四。。。次要么是亂碼 要么是沒反應(yīng)
直到亂碼出現(xiàn)
重新擲硬幣 規(guī)律同上
出現(xiàn)aaaa的概率完全沒有規(guī)則
有時候可以三五遍 有時候一遍都沒有
多次嘗試之后開始動腦子
感覺應(yīng)該是 沒反應(yīng) 應(yīng)該是接收數(shù)據(jù)沒有結(jié)束 在多次點(diǎn)擊發(fā)送aaaa 之后 把幾次的東西結(jié)合在了一起 然后 解壓失敗
然后在擴(kuò)展上有一陣瞎雞兒鼓搗
發(fā)現(xiàn)
源碼里面有這兩個東西 大概意思應(yīng)該是
緩存區(qū)
$this->_recvBuffer
當(dāng)前包應(yīng)該有的長度
$this->_currentPackageLength
里面會判斷
如果緩存區(qū)小于當(dāng)前包應(yīng)該有的長度 則等待再次傳入數(shù)據(jù)?
[attach]2315[/attach]
?
直到緩存區(qū)等于?
?
[attach]2316[/attach]
?
?
或者超過?
?
[attach]2317[/attach]
?
?
當(dāng)前包應(yīng)該有的長度 然后觸發(fā)
?
[attach]2318[/attach]
就是這個方法public function onMessage($connection, $data)
?
我遇到的沒反應(yīng)就是因?yàn)榫彺鎱^(qū)的長度小于 當(dāng)前包應(yīng)該有的長度 導(dǎo)致了 他一直在接收中
而亂碼則是因?yàn)?吧兩次或者三次的內(nèi)容合成了一個去解析
?
因?yàn)槲覀鞯膬?nèi)容的固定的都是 aaaa 所以 內(nèi)容長度是4 加上好像有個頭部長度為6 加起來 就是10
$this->_currentPackageLength
上面這個值就固定是10
?
[attach]2319[/attach]
?
可以看出 _recvBuffer 是接受過來的數(shù)據(jù)
但是經(jīng)過輸出他的長度 每次都在變化 有時7 有時6 有時10等
但是我的前端是從百度復(fù)制過來的 而且試了好幾個百度的樣稿? 但是都沒有用 接收到的數(shù)據(jù)的長度還是一直在變化
?
這是前端的代碼
[attach]2320[/attach]
?
我想問 為什么我這個
$this->_recvBuffer
接收到的長度一直在變化 是前端問題 還是后臺寫的不對
?