webman-push插件兩處BUG
環(huán)境Windows10 PHP7.4 擴(kuò)展都已經(jīng)安裝正常
1、api->trigger提交數(shù)據(jù)不成功,測(cè)試onApiClientMessage, var_dump無(wú)回顯,沒(méi)執(zhí)行到這里
2、$request->rawBody() , 默認(rèn)獲取body數(shù)據(jù)存在獲取無(wú)效的問(wèn)題。詭異的是,有時(shí)候可以有時(shí)候不可以,
那么肯定就是BUG了,可以或者不可以的時(shí)候,數(shù)據(jù) 配置 KEY等完全一樣;就連測(cè)試BUG的人都一樣~_~!
// 執(zhí)行絕對(duì)是有問(wèn)題的,沒(méi)有正常發(fā)送結(jié)果
$ch = $this->createCurl($this->_settings['api_address'], $s_url, 'POST', $query_params);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_value);
$response = $this->execCurl($ch);
/**
* Get http raw body.
*
* @return string
*/
public function rawBody()
{
// 獲取body數(shù)據(jù)不成功,數(shù)字簽名校驗(yàn)是正常的,就這里獲取不到
return \substr($this->_buffer, \strpos($this->_buffer, "\r\n\r\n") + 4);
}
這個(gè)BUG其實(shí)昨天做測(cè)試的時(shí)候就發(fā)現(xiàn)了,但是,當(dāng)我從PHP7.3改為PHP7.4之后,就正常了,
我起初還以為是某個(gè)包或者函數(shù)不兼容7.3,今天臨下班看了下,居然又無(wú)法接收到了,按照平時(shí)的編碼習(xí)慣,
一個(gè)CURL函數(shù)寫完了,基本上不會(huì)出岔子,所以就沒(méi)往這里想,主要是,,這個(gè)插件吧,無(wú)異常,無(wú)日志,啥都沒(méi)有就是接收不到,搞的我很尷尬。通過(guò)一點(diǎn)點(diǎn)的追蹤發(fā)現(xiàn)了上述的兩個(gè)問(wèn)題;
1、發(fā)送的這個(gè)API接口,因?yàn)橄琻ame-channels等,可以完全使用POST寫死或者直接使用一個(gè)HTTP庫(kù)更好一些,或者可以把自身的request擴(kuò)展下,包裝guzzlehttp一層可以自己寫GET POST數(shù)據(jù)更穩(wěn)定一些。增加一個(gè)加密也可以,這樣數(shù)據(jù)通訊也安全了,如果可行,也可以參考C++ TCP鏈接里面常用的struct消息結(jié)構(gòu)體來(lái)進(jìn)行數(shù)據(jù)的捕捉!
2、rawBody函數(shù),校驗(yàn)過(guò)了,但是。。。Server.php第666行,能不能錯(cuò)誤信息不叫Invalid signature???這個(gè)錯(cuò)誤提示搞的我懷疑人生了,我把發(fā)送簽名,接收簽名都打印出來(lái),結(jié)果導(dǎo)致我以為
// 一開(kāi)始我以為是這里斷言的,說(shuō)實(shí)話,我對(duì)著電腦發(fā)呆了很久很久~
if ($auth_signature !== $real_auth_signature) {
return $connection->send(new Response(401, [], 'Invalid signature'));
}
按照webman-push文檔搭建簡(jiǎn)易工程,接收不到,new Api()->xxxx執(zhí)行這個(gè)控制器的時(shí)候,等待加載完畢的時(shí)間有點(diǎn)過(guò)長(zhǎng)。。
同上。
補(bǔ)充一下:使用postman直接post /app/1024/event 修改rawBody后是可以正常輸出信息的,
也就是端口監(jiān)聽(tīng)是沒(méi)問(wèn)題的,只有curl和rewBody需要處理
webman/push插件用的人挺多了,沒(méi)有反饋過(guò)有這個(gè)問(wèn)題。
windows下cmd可能會(huì)被不小心暫停,例如鼠標(biāo)點(diǎn)擊cmd窗口時(shí)就會(huì)暫停程序,這會(huì)導(dǎo)致進(jìn)程無(wú)任何響應(yīng),這個(gè)和你說(shuō)的現(xiàn)象類似。如果再次出現(xiàn)你說(shuō)的問(wèn)題,切換到cmd窗口,按esc鍵可以取消暫停,試下是不是這個(gè)問(wèn)題。
如果還沒(méi)解決,建議重新創(chuàng)建一個(gè)空的webman項(xiàng)目,安裝webman/push試下,排除其它干擾。
感謝亮哥,我現(xiàn)在這個(gè)工程代碼寫的太多了,只能一點(diǎn)點(diǎn)排查,我新建項(xiàng)目也不可以。但是我用postman直接發(fā)送計(jì)算好的HTTP+data確正常,然后我用一個(gè)純新的環(huán)境測(cè)試了PHP7.3 PHP7.4發(fā)現(xiàn)是正常的,所以可能是我電腦更新某些補(bǔ)丁的問(wèn)題。