First, in Java (my nodejs-inspired NIO/Netty based HTTP server):

{% highlight java %} Server server = Http.createServer(); server.setRequestListener(new RequestListener() { @Override public void service(ServerRequest request, ServerResponse response) { HashMap<String, String> headers = new HashMap<String, String>(); headers.put(“Content-Type”, “text/html; charset=utf-8”); headers.put(“Content-Length”, “47”); response.writeHeader(200, headers); response.end("

hello world

"); } }); server.listen(8080); {% endhighlight %}

Now, in Javascript:

{% highlight js %} http.createServer(function(req, res) { res.writeHead(200, {“Content-Length”: “47”, “Content-Type”: “text/html; charset=utf-8”}); res.write("

hello world

"); res.end(); }).listen(8080); {% endhighlight %}

A quick “smoke” benchmark results using ab (MBA, 2 cores, 10.6.6, 4 GB, 2.13 GHz). First Java:

{% highlight bash %} $ ab -k -n 2000 -c 200 http://localhost:8080/ Time taken for tests: 0.127 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 2000 Total transferred: 305850 bytes HTML transferred: 95833 bytes Requests per second: 15693.29 [#/sec] (mean) Time per request: 12.744 [ms] (mean) Time per request: 0.064 [ms] (mean, across all concurrent requests) Transfer rate: 2343.65 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.6 0 10 Processing: 1 5 2.9 5 16 Waiting: 1 5 2.9 5 16 Total: 1 6 3.4 5 19 {% endhighlight %}

and then nodejs (kriszyp/multi-node using node 0.2.5 on 2 nodes):

{% highlight bash %} $ ab -k -n 2000 -c 200 http://127.0.0.1:8080/ Time taken for tests: 0.225 seconds Complete requests: 2000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 2000 Total transferred: 300150 bytes HTML transferred: 94047 bytes Requests per second: 8876.38 [#/sec] (mean) Time per request: 22.532 [ms] (mean) Time per request: 0.113 [ms] (mean, across all concurrent requests) Transfer rate: 1300.90 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.9 0 11 Processing: 0 18 3.7 18 28 Waiting: 0 18 3.7 18 28 Total: 0 18 4.5 18 39 {% endhighlight %}

So far, so good. I can now start adding Rhino.