12

我一直在研究将 websockets 与 Suave Web 服务器一起使用。不幸的是,它没有很好的记录,我设法找到的是:https ://github.com/SuaveIO/suave/tree/master/examples/WebSocket

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

我过去使用过 SignalR,但我更愿意为此避免使用它。

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

4

1 回答 1

11

Suave 没有提供任何开箱即用的东西,但是您可以轻松地扩展示例来做到这一点。

ws传递给函数的套接字处理程序handShake可以将客户端信息传递到外部,您可以围绕它构建发送/广播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
    }

然后由你来注入onConnectonDisconnect句柄来注册/注销客户端。

我使用 aMailboxProcessor来序列化 Connect/Disconnect/Send 操作,或者使用 Reactive Extensions 或共享可变并发存储(如ConcurrentDictionary...

于 2017-01-18T13:00:58.667 回答