我一直在研究如何在Suave web服务器上使用websockets。不幸的是,它并没有很好的文档记录,我所找到的就是:https://github.com/SuaveIO/suave/tree/master/examples/WebSocket
但是,这只显示了websocket对发出请求的客户端的响应,我希望基本上让套接字对所有连接的客户端做出响应。类似聊天服务器的东西。
我在过去使用过SignalR,但这次我更愿意避免使用它。
那么,如何让Suave服务器向所有连接的websocket客户端发送数据呢?
发布于 2017-01-18 21:00:59
Suave没有提供任何开箱即用的功能,但是您可以很容易地扩展该示例来做到这一点。
传递给handShake函数的套接字处理程序API可以将客户端信息传递到外部,您可以围绕它构建一个发送/广播ws。
例如,可以像这样修改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这样的共享可变并发存储……
https://stackoverflow.com/questions/41716418
复制相似问题