我一直在研究使用带有Suave Web服务器的websockets.不幸的是,它没有很好的记录,我设法找到的是:https://github.com/SuaveIO/suave/tree/master/examples/WebSocket
但是,这只显示了响应发出请求的客户端的websocket,我想基本上让套接字响应所有连接的客户端.像聊天服务器的东西.
我过去曾使用过SignalR,但我更愿意为此避免使用它.
那么,我如何让Suave服务器向所有连接的websocket客户端发送数据呢?
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 }
然后由您注入onConnect
和onDisconnect
处理注册/取消注册客户端.
我用a MailboxProcessor
来序列化连接/断开/发送操作,或者它很容易使用Reactive Extensions,或者像ConcurrentDictionary
... 这样的共享可变并发存储.