国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Error package. package_length=falseError 問題咨詢

shanyi

問題描述

環(huán)境:Linux
webman/gateway-worker v1.0.8
webman/think-orm v1.1.1
workerman/gateway-worker v3.1.1
workerman/http-client v2.0.1
workerman/psr7 v1.4.6
workerman/webman-framework v1.5.13
workerman/workerman v4.1.13

如題所示,我是在webman用使用的GatewayWorker,使用了自定義協(xié)議。我查詢了社區(qū)帖子說出現(xiàn)這個錯誤是錯誤包導致的。但是我現(xiàn)在這個情況不是必顯。有時候logs日志會記錄有時候沒有

程序代碼

process.php 代碼

<?php
use Webman\GatewayWorker\Gateway;
use Webman\GatewayWorker\BusinessWorker;
use Webman\GatewayWorker\Register;
return [
    '4gateway' => [
        'handler'     => Gateway::class,
        'listen'      => 'Fournetwork://0.0.0.0:7474',
        'count'       => cpu_count(),
        'reloadable'  => false,
        'constructor' => ['config' => [
            'lanIp'           => '127.0.0.1',
            'startPort'       => 2400,
            'pingInterval'    => 120,
            'pingData'        => '',
            'pingNotResponseLimit'=>1,
            'registerAddress' => '127.0.0.1:1238',
            'onConnect'       => function(){},
        ]]
    ],
    '4worker' => [
        'handler'     => BusinessWorker::class,
        'count'       => cpu_count()*2,
        'constructor' => ['config' => [
            'eventHandler'    => plugin\webman\gateway\Events::class,
            'name'            => 'FourChatBusinessWorker',
            'registerAddress' => '127.0.0.1:1238',
        ]]
    ],
    '4register' => [
        'handler'     => Register::class,
        'listen'      => 'text://127.0.0.1:1238',
        'count'       => 1, // Must be 1
        'constructor' => []
    ],
];

自定義協(xié)議代碼
Fournetwork.php 代碼(位置在:根目錄\Protocols)

<?php
namespace Protocols;

class Fournetwork
{
    /**
     * 檢查包的完整性
     * 如果能夠得到包長,則返回包的在buffer中的長度,否則返回0繼續(xù)等待數(shù)據(jù)
     * 如果協(xié)議有問題,則可以返回false,當前客戶端連接會因此斷開
     * @param string $buffer
     * @return int
     */
    public static function input($buffer)
    {
        // 16進制數(shù)據(jù)轉(zhuǎn)換
        $str = bin2hex($buffer);
        $pos = strpos($str, "fe");
        // 無法得知包長,返回0繼續(xù)等待數(shù)據(jù)
        if ($pos === false) {
            return false;
        }
        // 返回包的長度
        return strlen($buffer);
    }

    /**
     * 打包,當向客戶端發(fā)送數(shù)據(jù)的時候會自動調(diào)用
     * @param string $buffer
     * @return string
     */
    public static function encode($buffer)
    {
        // 這里可以對數(shù)據(jù)進行處理,然后返回處理后的數(shù)據(jù)
        return $buffer;
    }

    /**
     * 解包,當接收到的數(shù)據(jù)字節(jié)數(shù)等于input返回的值(大于0的值)自動調(diào)用
     * 并傳遞給onMessage回調(diào)函數(shù)的$data參數(shù)
     * @param string $buffer
     * @return string
     */
    public static function decode($buffer)
    {
        // 這里可以對數(shù)據(jù)進行解析,然后返回解析后的數(shù)據(jù)
        return $buffer;
    }
}

報錯信息

日志記錄的報錯信息

Error package. package_length=falseError 

備注說明

因為我是跟硬件對接的,所以發(fā)送的包都是hex2bin后的數(shù)據(jù)
格式如下:

$sendData = hex2bin('發(fā)送的數(shù)據(jù)');
Gateway::sendToClient($client_id, $sendData);
1112 1 0
1個回答

meows
    /**
     * 檢查包的完整性
     * 如果能夠得到包長,則返回包的在buffer中的長度,否則返回0繼續(xù)等待數(shù)據(jù)
     * 如果協(xié)議有問題,則可以返回false,當前客戶端連接會因此斷開
     * @param string $buffer
     * @return int
     */
    public static function input($buffer)
    {
        // 16進制數(shù)據(jù)轉(zhuǎn)換
        $str = bin2hex($buffer);
        $pos = strpos($str, "fe");
        // 無法得知包長,返回0繼續(xù)等待數(shù)據(jù)
        if ($pos === false) {
            return false;
        }
        // 返回包的長度
        return strlen($buffer);
    }

$pos === false 你要改成0,不能是布爾值。

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??