- USING: io.sockets io kernel math threads io.encodings.ascii\r
- debugger tools.time prettyprint concurrency.count-downs\r
- namespaces arrays continuations ;\r
- IN: benchmark.sockets\r
- \r
- SYMBOL: counter\r
- \r
- : number-of-requests 1 ;\r
- \r
- : server-addr "127.0.0.1" 7777 <inet4> ;\r
- \r
- : server-loop ( server -- )\r
- dup accept [\r
- [\r
- read1 CHAR: x = [\r
- "server" get dispose\r
- ] [\r
- number-of-requests\r
- [ read1 write1 flush ] times\r
- counter get count-down\r
- ] if\r
- ] with-stream\r
- ] curry "Client handler" spawn drop server-loop ;\r
- \r
- : simple-server ( -- )\r
- [\r
- server-addr ascii <server> dup "server" set [\r
- server-loop\r
- ] with-disposal\r
- ] ignore-errors ;\r
- \r
- : simple-client ( -- )\r
- server-addr <client> [\r
- CHAR: b write1 flush\r
- number-of-requests\r
- [ CHAR: a dup write1 flush read1 assert= ] times\r
- counter get count-down\r
- ] with-stream ;\r
- \r
- : stop-server ( -- )\r
- server-addr <client> [\r
- CHAR: x write1\r
- ] with-stream ;\r
- \r
- : clients ( n -- )\r
- dup pprint " clients: " write [\r
- dup 2 * <count-down> counter set\r
- [ simple-server ] "Simple server" spawn drop\r
- yield yield\r
- [ [ simple-client ] "Simple client" spawn drop ] times\r
- counter get await\r
- stop-server\r
- yield yield\r
- ] time ;\r
- \r
- : socket-benchmarks\r
- 10 clients\r
- 20 clients\r
- 40 clients ;\r
- ! 80 clients\r
- ! 160 clients\r
- ! 320 clients\r
- ! 640 clients ;\r
- \r
- MAIN: socket-benchmarks\r
+ USING: io.sockets io kernel math threads
+ debugger tools.time prettyprint concurrency.count-downs
+ namespaces arrays continuations ;
+ IN: benchmark.sockets
+
+ SYMBOL: counter
+
+ : number-of-requests 1 ;
+
+ : server-addr "127.0.0.1" 7777 <inet4> ;
+
+ : server-loop ( server -- )
+ dup accept [
+ [
+ read1 CHAR: x = [
+ "server" get dispose
+ ] [
+ number-of-requests
+ [ read1 write1 flush ] times
+ counter get count-down
+ ] if
+ ] with-stream
+ ] curry "Client handler" spawn drop server-loop ;
+
+ : simple-server ( -- )
+ [
- server-addr <server> dup "server" set [
++ server-addr ascii <server> dup "server" set [
+ server-loop
+ ] with-disposal
+ ] ignore-errors ;
+
+ : simple-client ( -- )
- server-addr <client> [
++ server-addr ascii <client> [
+ CHAR: b write1 flush
+ number-of-requests
+ [ CHAR: a dup write1 flush read1 assert= ] times
+ counter get count-down
+ ] with-stream ;
+
+ : stop-server ( -- )
- server-addr <client> [
++ server-addr ascii <client> [
+ CHAR: x write1
+ ] with-stream ;
+
+ : clients ( n -- )
+ dup pprint " clients: " write [
+ dup 2 * <count-down> counter set
+ [ simple-server ] "Simple server" spawn drop
+ yield yield
+ [ [ simple-client ] "Simple client" spawn drop ] times
+ counter get await
+ stop-server
+ yield yield
+ ] time ;
+
+ : socket-benchmarks ;
+
+ MAIN: socket-benchmarks