Suave中的Websockets

时间:2017-01-18 10:04:40

标签: websocket f# suave

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

但是,这只显示了响应发出请求的客户端的websocket,我想基本上让套接字响应所有连接的客户端。像聊天服务器一样。

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

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

1 个答案:

答案 0 :(得分:8)

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句柄来注册/取消注册客户端。

我使用MailboxProcessor来序列化连接/断开/发送操作,或者它易于使用Reactive Extensions,或者像ConcurrentDictionary这样的共享可变并发存储......