使用workerman http异步流式请求,消息长了,progress会拿到一半消息,如何处理?

954815278
$options = [
    'max_conn_per_addr' => 128,
    'keepalive_timeout' => 15,
    'connect_timeout' => 30,
    'timeout' => 600,
];
$client = new Client($options);
$client->request($uri, [
    'method' => 'POST',
    'version' => '1.1',
    'data' => json_encode($data),
    'headers' => [
        'Authorization' => "Bearer {$appKey}",
        'X-DashScope-SSE' => 'enable',
    ],
    'progress' => function ($buffer) use ($onMessage) {
        $this->debug && $this->stdoutLogger->info($buffer);
    },
]);

遇到问题

以上代码的buffer有时候会是不完整的消息,我发现这个情况是出现在消息很长的情况下

错误数据

...内,表明� 

会出现这种数据,消息短没有问题,消息长了看起来应该是不完整,请问如何处理?

124 2 0
2个回答

参数有个超时时间,设置长一些

  • 954815278 6天前

    你好,walkor
    我测了2次
    出现不完整消息
    1次出现在 72s
    2次出现再 33s

    但是被截断的消息长度都是一样的
    2次用strlen($message),截断时候长度均为1455

buffer 本身就是收到的片段,不是完整的。
比如对方发来的数据是 ABCD, progress假设触发了3次,那么三次buffer可能是这样的 A BC D,每次都是一个片段,加起来是完整的 ABCD。
你要完整数据用 success 回调

  • 暂无评论
×
🔝