1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math threads io io.sockets
4 io.encodings.ascii io.streams.duplex debugger tools.time
5 prettyprint concurrency.count-downs concurrency.promises
6 namespaces arrays continuations destructors ;
13 CONSTANT: number-of-requests 1000
15 : server-addr ( -- addr )
16 "127.0.0.1" port-promise get ?promise <inet4> ;
18 : server-loop ( server -- )
25 [ read1 write1 flush ] times
28 ] curry "Client handler" spawn drop server-loop ;
30 : simple-server ( -- )
32 "127.0.0.1" 0 <inet4> ascii <server>
34 [ addr>> port>> port-promise get fulfill ]
35 [ [ server-loop ] with-disposal ]
39 : simple-client ( -- )
44 [ CHAR: a dup write1 flush read1 assert= ] times
47 counter get count-down ;
55 dup pprint " clients: " write [
56 <promise> port-promise set
57 dup <count-down> counter set
58 [ simple-server ] "Simple server" spawn drop
60 [ [ simple-client ] "Simple client" spawn drop ] times
66 : socket-benchmarks ( -- )
73 MAIN: socket-benchmarks