我一直在研究将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
}
然后由你来注入onConnect
和onDisconnect
句柄来注册/注销客户端。
我使用MailboxProcessor
来序列化连接/断开连接/发送操作,或者很容易使用反应式扩展或共享的可变并发存储,例如ConcurrentDictionary
......