簡易 HTTP Server

簡易HTTP Server で Haskell を用いた簡易 HTTP Server (httpd) が紹介されていましたので、gawk の inet を介した接続での簡易 HTTP Server を作ってみました。

#! /usr/bin/gawk -f
# simple_httpd.awk

BEGIN {
    port = "8080";
    http_service = "/inet/tcp/" port "/0/0";
    RS = ORS = "\r\n";

    for (;;) {
        if ((http_service |& getline) > 0) {
            print "HTTP/1.x 200 OK"         |& http_service;
            print "Content-type: text/html" |& http_service;
            print ""                        |& http_service;
            print "<h1>Hello, world!</h1>"  |& http_service;
        }
        close(http_service);
    }
}

gawk でも非常に簡単に HTTP Server が組めてしまいます。 その利便性から、緊急のサーバーや試験的なサーバーとして使われているところもあるようです。

実行は以下のようにしてコンソールから起動するだけです。

$ gawk -f simple_httpd.awk

実行結果は以下のとおりです。

DoukakuAWK_065.png

ただし、この gawk の機能を用いた HTTP Server では、タイムアウトの機能がなかったり、マルチスレッドで動作させることが困難だったりするため、あまり実用的ではありません。 私が LL Ring にて「じゃんけん 2.0」で紹介したものと基本的に同じです。

tag_gawk.pngtag_gawk.png