Echo Server
Monday, August 6, 2012
Factor has nice cross-platform support for network programming. As is fairly typical, I am going to use an “echo server” to demonstrate how the libraries work.
The basic logic for an “echo server” is to read input from a client,
write it back to them, and repeat until the client disconnects. Using
the input and output stream
abstraction, we
can build a word which does this in a general manner, recursing until
f
is read indicating end-of-stream:
: echo-loop ( -- )
1024 read-partial [ write flush echo-loop ] when* ;
Our “echo server” will use TCP (i.e., connection-oriented
networking)
and the general server
abstraction
that comes with Factor with a binary encoding. The server framework uses
the name "echo.server"
to automatically log client-related messages
(such as connect and disconnect events as well as errors) to
$FACTOR/logs/echo.server
. We specify the echo-loop
quotation as the
handler for clients:
: <echo-server> ( port -- server )
binary <threaded-server>
swap >>insecure
"echo.server" >>name
[ echo-loop ] >>handler ;
We can start an echo server on, for example, port 12345:
IN: scratchpad 12345 <echo-server> start-server
Testing this is pretty easy using Netcat or a similar client:
$ nc localhost 12345
Hello, Factor
Hello, Factor
This is available as the echo-server vocabulary.