Skip to content

Support subscriptions using SSE (Server-Sent Events) as alternative to websockets #476

Open
@cmeeren

Description

@cmeeren

I propose that support is added for the GraphQL over Server-Sent Events Protocol, like HotChocolate has.

This simplifies authentication, since you can use the same authentication as normal HTTP requests.

I haven't looked at the GraphQL-specific parts of it, but SSE it itself technically very simple. Here is a demo:

Get(
    "/sse-test",
    RequestDelegate(fun (ctx: HttpContext) ->
        task {
            ctx.Response.Headers.Add("Content-Type", "text/event-stream")

            while not ctx.RequestAborted.IsCancellationRequested do
                do!
                    ctx.Response.WriteAsync(
                        $"data: {DateTime.Now}"
                    )

                do! ctx.Response.WriteAsync("\n\n")
                do! ctx.Response.Body.FlushAsync()
                do! Async.Sleep(1000)
        }
    )
)

You can test it by simply opening that endpoint in a browser (at least Edge works fine).

Related: #460

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions