Suave 中的 Websockets
Websockets in Suave
我一直在研究将 websockets 与 Suave 网络服务器一起使用。不幸的是,它没有很好的记录,我所找到的只是:https://github.com/SuaveIO/suave/tree/master/examples/WebSocket
但是,这只显示了 websocket 响应发出请求的客户端,我基本上想让套接字响应所有连接的客户端。类似聊天服务器的东西。
我过去使用过 SignalR,但我宁愿避免使用它。
那么,我将如何让 Suave 服务器向所有连接的 websocket 客户端发送数据?
Suave 不提供开箱即用的任何东西,但是您可以轻松地扩展示例来实现这一点。
传递给handShake
函数的socket handlerws
可以向外传递client信息,可以围绕它构建send/broadcastAPI
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
句柄注入 register/unregister 客户端。
我使用 MailboxProcessor
来序列化 Connect/Disconnect/Send 操作,或者使用 Reactive Extensions 或像 ConcurrentDictionary
...[=18= 这样的共享可变并发存储很容易]
我一直在研究将 websockets 与 Suave 网络服务器一起使用。不幸的是,它没有很好的记录,我所找到的只是:https://github.com/SuaveIO/suave/tree/master/examples/WebSocket
但是,这只显示了 websocket 响应发出请求的客户端,我基本上想让套接字响应所有连接的客户端。类似聊天服务器的东西。
我过去使用过 SignalR,但我宁愿避免使用它。
那么,我将如何让 Suave 服务器向所有连接的 websocket 客户端发送数据?
Suave 不提供开箱即用的任何东西,但是您可以轻松地扩展示例来实现这一点。
传递给handShake
函数的socket handlerws
可以向外传递client信息,可以围绕它构建send/broadcastAPI
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
句柄注入 register/unregister 客户端。
我使用 MailboxProcessor
来序列化 Connect/Disconnect/Send 操作,或者使用 Reactive Extensions 或像 ConcurrentDictionary
...[=18= 这样的共享可变并发存储很容易]