racket/collects/tests/net/stress/websocket.rkt
2010-08-30 06:39:12 -06:00

35 lines
1.0 KiB
Racket

#lang racket/base
(require tests/stress
net/websocket
net/url
racket/async-channel)
(fit "websocket echo server"
500
(λ (n)
(define confirm (make-async-channel))
(define shutdown!
(ws-serve #:port 0
#:confirmation-channel confirm
(λ (wsc _)
(let loop ()
(define m (ws-recv wsc))
(unless (eof-object? m)
(ws-send! wsc m)
(loop))))))
(define port (async-channel-get confirm))
(define THREADS 10)
(define REQS n)
(for-each thread-wait
(for/list ([t (in-range THREADS)])
(thread
(λ ()
(define conn (ws-connect (string->url (format "ws://localhost:~a" port))))
(for ([r (in-range REQS)])
(ws-send! conn "ping")
(ws-recv conn))))))
(shutdown!)))