温文尔雅的网络套接字



我一直在研究将websockets与Suave网络服务器一起使用。不幸的是,它没有很好的记录,我设法找到的只是这个:https://github.com/SuaveIO/suave/tree/master/examples/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
    }

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

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

最新更新