1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See https://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 ;
10 SYMBOL: server-promise
14 CONSTANT: number-of-requests 1000
16 : server-addr ( -- addr )
17 "127.0.0.1" port get <inet4> ;
19 : server-loop ( server -- )
26 [ read1 write1 flush ] times
29 ] curry "Client handler" spawn drop server-loop ;
31 : simple-server ( -- )
32 [ server get [ server-loop ] with-disposal ] ignore-errors
33 t server-promise get fulfill ;
35 : simple-client ( -- )
40 [ CHAR: a dup write1 flush read1 assert= ] times
43 counter get count-down ;
51 dup pprint " clients: " write [
52 <promise> server-promise set
53 dup <count-down> counter set
54 "127.0.0.1" 0 <inet4> ascii <server>
55 [ server set ] [ addr>> port>> port set ] bi
57 [ simple-server ] "Simple server" spawn drop
58 [ yield [ simple-client ] "Simple client" spawn drop ] times
62 server-promise get ?promise drop
65 : sockets-benchmark ( -- )
72 MAIN: sockets-benchmark