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

模擬在連接上發(fā)送buffer時報錯

wanyuwei

問題描述

前端使用長鏈接ajax模擬請求,服務端持續(xù)輸出響應結(jié)果,但是響應結(jié)果里面會提示Call to a member function getRemoteIp(),導致無法正確響應

程序代碼

public function test(Request $request): Response
{
        // 獲取瀏覽器鏈接
        $connection = $request->connection;
        for($i=0;$i<=5;$i++){
            $buffer = "我是第{$i}段內(nèi)容";
            $connection->send(new Chunk($buffer));
            $connection->send(new Chunk(''));
            $connection->send($buffer, true);
            sleep(1); // 暫停1秒
        }
        // 向瀏覽器發(fā)送頭部響應
        return response("\n")->withHeaders([
            "Content-Type" => "application/octet-stream",
            "Transfer-Encoding" => "chunked",
        ]);
}

報錯信息

我是第4段內(nèi)容13
我是第5段內(nèi)容
0

我是第5段內(nèi)容HTTP/1.1 500 Internal Server Error
Server: workerman
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With,Origin
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Connection: keep-alive
Content-Type: text/html;charset=utf-8
Content-Length: 2740

Error: Call to a member function getRemoteIp() on null in /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/Http/Request.php:178
Stack trace:
#0 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/Http/Request.php(215): Webman\Http\Request->getRemoteIp()
#1 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/Exception/ExceptionHandler.php(68): Webman\Http\Request->getRealIp()
#2 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/support/exception/Handler.php(34): Webman\Exception\ExceptionHandler->report()
#3 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/App.php(261): support\exception\Handler->report()
#4 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/App.php(343): Webman\App::exceptionResponse()
#5 /www/wwwroot/test0307.c5html.cn/webman/vendor/webman/log/src/Middleware.php(58): Webman\App::Webman\{closure}()
#6 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/App.php(341): Webman\Log\Middleware->process()
#7 /www/wwwroot/test0307.c5html.cn/webman/app/middleware/AccessControlMiddleware.php(26): Webman\App::Webman\{closure}()
#8 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/App.php(341): app\middleware\AccessControlMiddleware->process()
#9 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/App.php(168): Webman\App::Webman\{closure}()
#10 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Connection/TcpConnection.php(646): Webman\App->onMessage()
#11 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Events/Select.php(311): Workerman\Connection\TcpConnection->baseRead()
#12 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Worker.php(1629): Workerman\Events\Select->loop()
#13 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Worker.php(1423): Workerman\Worker::forkOneWorkerForLinux()
#14 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Worker.php(1397): Workerman\Worker::forkWorkersForLinux()
#15 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Worker.php(1779): Workerman\Worker::forkWorkers()
#16 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Worker.php(1715): Workerman\Worker::monitorWorkersForLinux()
#17 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/workerman/Worker.php(562): Workerman\Worker::monitorWorkers()
#18 /www/wwwroot/test0307.c5html.cn/webman/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#19 /www/wwwroot/test0307.c5html.cn/webman/start.php(4): support\App::run()
#20 {main}

截圖報錯信息里報錯文件相關(guān)代碼

操作系統(tǒng)及workerman/webman等框架組件具體版本

Linux CentOS7.6
Workerman版本4.1.9
Webman版本1.5.2
php7.4

1048 1 0
1個回答

walkor 打賞

寫法有問題,如果不熟悉http協(xié)議,不要操作connection對象。
http協(xié)議先要發(fā)送http頭,然后是包體,瀏覽器收到空的Chunk('')就停止收數(shù)據(jù)了,
你先發(fā)了chunk包體,然后發(fā)了空的Chunk(''),然后又發(fā)字符串,又發(fā)包體,再發(fā)包頭,還用了workerman里明令禁止的sleep,完全亂寫。

  • wanyuwei 2023-09-06

    理解了,謝謝大佬

    public function test(Request $request): Response
        {
            // 獲取瀏覽器鏈接
            $connection = $request->connection;
    
            // 發(fā)送響應頭部
            $connection->send(response("start\n")->withHeaders([
                "Content-Type" => "application/octet-stream",
                "Transfer-Encoding" => "chunked",
            ]));
    
            for ($i = 0; $i <= 5; $i++) {
                $buffer = "我是第{$i}段內(nèi)容\n";
                $connection->send(new Chunk($buffer));
            }
    
            // 發(fā)送空的Chunk來結(jié)束響應
            $connection->send(new Chunk('end'));
            $connection->send(new Chunk(''));
    
    }
年代過于久遠,無法發(fā)表回答
??