首页 > 解决方案 > 在 F# 中流式传输服务器发送的事件 (SSE)

问题描述

使用 System.Net.Http 库将“服务器发送事件 (SSE) 样式”事件流式传输到 F# 前端的轻量级方法是什么?我了解事件流格式(例如此 PHP 示例代码),但我正在寻求一些指导以在服务器端 F# 应用程序中实现流部分(我在 .Net Framework 4.8 上)。

标签: f#server-sent-events.net-framework-4.8

解决方案


你可以使用Suave。下面的示例每秒发送一条消息(使用 SSE)我没有在 .net 47 中尝试过(我在 Mac 中的 .net 5 中尝试过),但它应该可以工作。

open Suave
open Suave.Sockets
open Suave.Sockets.Control
open Suave.EventSource
open Suave.Operators
open Suave.Filters

let write i out =
    socket {
      let msg = { id = string i; data = string i; ``type`` = None }
      do! msg |> send out
      return! SocketOp.ofAsync (Async.Sleep 1000)
    }
    
    
let app =
  choose [
          GET  >=> request (fun _ -> 
            handShake (fun out ->
              socket {
                let actions  = 
                    Seq.initInfinite (fun n -> n + 1)
                    |> Seq.map (fun i -> write i out)

                for a in actions do
                    do! a
                   
                return out
              }))
    
    
[<EntryPoint>]
let main _ =
     startWebServer defaultConfig app
     0

推荐阅读