Code: Select all
(set 'content "Hello world.")
(set 'response (format {HTTP/1.0 200 OK
Date: Wed, 13 Mar 2008 23:59:59 GMT
Content-Type: text/html
Content-Length: %d
%s} (length content) content))
(define (sig-err n msg)
(println "\nZowie!")
(println "Caught signal " n)
(if msg (println msg))
(print "Killing responders: ")
(map destroy procs)
(println "done!\n")
(exit))
(constant 'SIGINT 2)
(constant 'SIGKILL 9)
(signal 2 'sig-err)
(signal 9 'sig-err)
(constant 'max-request-size 1024)
(constant 'max-responders 4)
(define (responder socket)
(let ((conn (net-accept socket)) request)
(while (not (net-error))
(net-receive conn 'request max-request-size)
;; in a real environment, get the request content here
(net-send conn response))
(close conn)
(exit)))
;; open port socket
(println "Server is starting.")
(set 'listener (net-listen 8080))
(unless listener (throw-error (net-error)))
;; main loop
(set 'procs '())
(while (not (net-error))
;; block until a connection attempt
(while (not (net-select listener "read" 1000)) (sleep 50))
;; fork a responder
(if (<= (length procs) max-responders)
(push (fork (responder listener)) procs -1)
(begin
(wait-pid (pop procs))
(push (fork (responder listener)) procs -1))))
;; check for errors
(if (net-error) (println (net-error)))
;; clean up and quit
(map destroy procs)
(exit 0)
httperf --timeout=5 --client=0/1 --server=localhost --port=8080 --uri=/whatever --rate=200 --send-buffer=4096 --recv-buffer=16384 --num-conns=5000 --num-calls=10
Maximum connect burst length: 1
Total: connections 5000 requests 50000 replies 50000 test-duration 25.020 s
Connection rate: 199.8 conn/s (5.0 ms/conn, <=13 concurrent connections)
Connection time [ms]: min 0.8 avg 15.1 max 64.7 median 4.5 stddev 16.7
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 10.000
Request rate: 1998.4 req/s (0.5 ms/req)
Request size : 68.0
Reply rate [replies/s]: min 1984.1 avg 1995.1 max 2000.1 stddev 7.3 (5 samples)
Reply time [ms]: response 1.5 transfer 0.0
Reply size : header 96.0 content 12.0 footer 0.0 (total 108.0)
Reply status: 1xx=0 2xx=50000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 4.61 system 16.93 (user 18.4% system 67.7% total 86.1%)
Net I/O: 343.5 KB/s (2.8*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0