gpt4 book ai didi

symfony - 在 Symfony2 中流式传输响应

转载 作者:行者123 更新时间:2023-12-04 00:42:34 24 4
gpt4 key购买 nike

我正在尝试文档中的这个示例:Streaming a Response in Symfony2 .

/**
* @param Request $request
* @return Response $render
* @Route("/streamedResponse", name="streamed_response")
* @Template("AcmeTestBundle::streamedResponse.html.twig")
*/
public function streamedResponseAction(Request $request)
{
$response = new StreamedResponse();
$response->setCallback(function () {
echo 'Hello World';
flush();
sleep(3);
echo 'Hello World';
flush();
});

return $response;

}

这会同时输出所有内容。我做错了什么吗?

最佳答案

我尝试添加 ob_flush() 并且它似乎有效。这是我的代码:

public function streamedAction()
{
$response = new StreamedResponse();
$response->setCallback(function () {
echo 'Hello World';
ob_flush();
flush();
sleep(3);
echo 'Hello World';
ob_flush();
flush();
});

return $response;
}

这将返回带有分块数据的分块传输编码 header 。这是结果的输出:
$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET /app_dev.php/streamed HTTP/1.1
Host: symfony21.localdomain

HTTP/1.1 200 OK
Date: Wed, 12 Sep 2012 05:34:12 GMT
Server: Apache/2.2.17 (Unix) DAV/2 mod_ssl/2.2.17 OpenSSL/0.9.8o
cache-control: no-cache, private
x-debug-token: 50501eda7d437
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

b
Hello World
b
Hello World
0

Connection closed by foreign host.

如果你在浏览器中看到这个响应,它会在加载大约 3 秒后显示“HelloWorldHelloWorld”,因为浏览器会等待所有分块数据被接收,因为 Content-Type 是 text/*,但是当你看到网络流时,它实际上是在做通过发送分块数据进行流式传输。

关于symfony - 在 Symfony2 中流式传输响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com