Skip to content

Server-sent Events (SSE) in Swift using async sequences

Notifications You must be signed in to change notification settings

velos/AsyncServerSentEvents

Repository files navigation

AsyncServerSentEvents

An implementation of Server-Sent Events (SSE) for Swift using async sequences. Events are parsed from URLSession.AsyncBytes and exposed as an AsyncSequence.

Usage

let url = URL(string: "https://example.com/sse")!
let sse = try await URLSession.shared
    .asyncBytes(from: url)
    .sse()

for try await event in sse {
    print(event)
}

let lastEventId = await sse.state.lastEventId
let retryInterval = await sse.state.retryInterval

or

let (sse, response) = try await URLSession.shared.serverSentEvents(from: url)

for try await event in sse {
    print(event)
}

let lastEventId = await sse.state.lastEventId
let retryInterval = await sse.state.retryInterval

or

let request = URLRequest(url: url)
let (sse, response) = try await URLSession.shared.serverSentEvents(for: request)

for try await event in sse {
    print(event)
}

let lastEventId = await sse.state.lastEventId
let retryInterval = await sse.state.retryInterval

Supported Features

  • WHATWG-compliant line parsing (CR, LF, CRLF)
  • Strict field parsing (data, id, event) with single-space value trim
  • Comment lines ignored per spec
  • Retry field handling
  • Last-Event-ID persistence across events/reconnects

About

Server-sent Events (SSE) in Swift using async sequences

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages