Skip to content

在使用异步流返回时,并不是实时刷新逐条返回结果,而是一次返回结果 #1942

@alivy

Description

@alivy

Steps to Reproduce the Problem

  1. 当响应体中有text/event-stream时,返回结果为一次性加载返回,而并非实时刷新
  2. 即使我加载了自己的Middleware添加到OcelotPipelineExtensions时,也不能实时刷新,以异步流的形式收到结果
    自定义拓展代码如下

`

public class CustomResponseMiddleware : OcelotMiddleware
{
    private readonly RequestDelegate _next;
    public CustomResponseMiddleware(RequestDelegate next, IOcelotLoggerFactory loggerFactory)
        : base(loggerFactory.CreateLogger<CustomResponseMiddleware>())
    {
        _next = next;
    }

    public async Task Invoke(HttpContext httpContext)
    {
        var response = httpContext.Items.DownstreamResponse();
        const string streamingContent = "text/event-stream";
        if (httpContext.Response.Headers["Content-Type"] == streamingContent
            || httpContext.Response.ContentType == streamingContent)
        {
            //await ForwardStream(httpContext.Response.Body, response);
            var stream = await response.Content.ReadAsStreamAsync();
            await WriteServerStreamEventsAsync(httpContext, stream);
        }
        await _next.Invoke(httpContext);
    }
    private static async Task WriteServerStreamEventsAsync(HttpContext httpContext, Stream contentStream)
    {
        var responseStream = httpContext.Response.Body;
        await contentStream.CopyToAsync(responseStream, httpContext.RequestAborted);
        await responseStream.FlushAsync(httpContext.RequestAborted);
    }

}

`

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionInitially seen a question could become a new feature or bug or closed ;)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions