Recipe: REST + WebSockets on one port
open Suave
open Suave.Filters
open Suave.Operators
open Suave.Successful
open Suave.WebSocket
open Suave.Sockets
open Suave.Sockets.Control
let ws (webSocket : WebSocket) (_ : HttpContext) =
socket {
let mutable loop = true
while loop do
let! msg = webSocket.read()
match msg with
| (Text, data, true) -> do! webSocket.send Text data true
| (Close, _, _) -> loop <- false
| _ -> ()
}
let app = choose [
path "/websocket" >=> handShake ws
GET >=> path "/api/health" >=> OK "ok"
RequestErrors.NOT_FOUND "Not found"
]
startWebServer defaultConfig appGuide: WebSockets.