Websocket 文雅的网袋

Websocket 文雅的网袋,websocket,f#,suave,Websocket,F#,Suave,我一直在研究如何在Suave web服务器上使用WebSocket。不幸的是,它没有很好的文档记录,我所能找到的只是: 但是,这只显示了websocket对发出请求的客户端的响应,我希望基本上让套接字响应所有连接的客户端。类似于聊天服务器的东西 我过去使用过SignalR,但现在更倾向于避免使用它 那么,我该如何让Suave服务器向所有连接的websocket客户端发送数据呢?Suave没有提供任何类似的现成功能,但是您可以轻松地扩展示例来实现这一点 传递给handShake函数的套接字处理程序

我一直在研究如何在Suave web服务器上使用WebSocket。不幸的是,它没有很好的文档记录,我所能找到的只是:

但是,这只显示了websocket对发出请求的客户端的响应,我希望基本上让套接字响应所有连接的客户端。类似于聊天服务器的东西

我过去使用过SignalR,但现在更倾向于避免使用它


那么,我该如何让Suave服务器向所有连接的websocket客户端发送数据呢?

Suave没有提供任何类似的现成功能,但是您可以轻松地扩展示例来实现这一点

传递给
handShake
函数的套接字处理程序
ws
可以将客户端信息传递到外部,您可以围绕它构建一个发送/广播API

ws
函数可以这样修改

let ws onConnect onDisconnect (webSocket: WebSocket) (context: HttpContext) =
    let loop () = (* the socket logic stays the same *)

    socket {
        onConnect webSocket context
        try
            do! loop ()
        finally
            onDisconnect context
    }
然后由您注入
onConnect
onDisconnect
句柄来注册/取消注册客户端

我使用
MailboxProcessor
来序列化连接/断开连接/发送操作,或者很容易使用反应式扩展,或者像
concurrentdirectionary
这样的共享可变并发存储