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