自定義協(xié)議在input方法里面接收客戶端傳入報(bào)文,隨后return給 decode()方法時(shí)卡住了,要過(guò)幾分鐘才往下執(zhí)行業(yè)務(wù)代碼,有誰(shuí)知道是什么原因?qū)е侣?/p>
public
static function input($recv_buffer, ConnectionInterface $connection)
{
$tempdata = bin2hex($recv_buffer);
echo "=========================收到上報(bào)數(shù)據(jù)==================== ";
$stateStr = substr($tempdata, 0, 4);
if(strcasecmp($stateStr, "7d7d") == 0){
$pos = strpos($recv_buffer, "0752");
if ($pos === false) {
return 0;
}
// 在這里程序會(huì)卡住不往下執(zhí)行
return $pos;
}
return false;
期望接著往后執(zhí)行
Workerman version:3.5.31
PHP version:7.3.32
接收到報(bào)文后不往下執(zhí)行decode()方法,求解
input 里打印下 $tempdata ,可能數(shù)據(jù)不全。
input里每個(gè)返回值都打印下,看下返回的什么,是不是返回的0 或者 false
返回的是7d7d00000001000016001c010c05daff3238394650512154170756312e302e30300000000000000752這一串然后就卡住了
input寫的不對(duì),架設(shè)完整的數(shù)據(jù)長(zhǎng)度為41個(gè)字節(jié),應(yīng)該返回41。但是你調(diào)用bin2hex()后數(shù)據(jù)變成82個(gè)字節(jié),然后你`$pos = strpos($recv_buffer, "0752");
返回長(zhǎng)度$pos值為78,是錯(cuò)誤的值。你應(yīng)該返回 ($pos + 4)/2;是真實(shí)的長(zhǎng)度。
我去還真是,難怪我在win系統(tǒng)上面用工具測(cè)試是可以的,因?yàn)橛霉ぞ咧苯影l(fā)送的就是上面這種明文,用設(shè)備去調(diào)試發(fā)送的是ASCII格式要轉(zhuǎn)換成16進(jìn)制,非常感謝,謝謝謝謝