インターネットから多くの小さな情報をダウンロードするプログラムを既に gawk で作成しています。(メディアスキャナーとインデクサー)
現在、wget を起動して情報を取得しています。これで問題ありませんが、呼び出し間の接続を単純に再利用したいと思います。プログラムを実行すると、同じ API サービスに対して 200 ~ 2000 回の呼び出しが行われる可能性があります。
gawk がネットワーキングを実行できることを発見したところ、geturlを見つけまし た。ただし、そのページの下部にあるアドバイスは十分に考慮されていますが、最後の行を読んで接続を開いたままにする簡単な方法を見つけることができません。
私は主に JSON データを読んでいるので、RS="}" を設定して、本文の長さが予想されるコンテンツの長さに達したときに終了できます。ただし、これは末尾の空白で壊れる可能性があります。より強固なアプローチを希望します。接続を開いたままにする散発的な http リクエストを awk に実装するより良い方法はありますか。現在、私は次の構造を持っています...
con="/inet/tcp/0/host/80";
send_http_request(con);
RS="\r\n";
read_headers();
# now read the body - but do not close the connection...
RS="}"; # for JSON
while ( con |& getline bytes ) {
body = body bytes RS;
if (length(body) >= content_length) break;
print length(body);
}
# Do not close con here - keep open
この小さなことがここでのすべての可能性を台無しにしているように見えるのは残念です. また、誰かが尋ねる場合:) ..
- awk が最初に選択されたのは歴史的な理由からです。当時、この組み込みプラットフォームには他の言語オプションがあまりありませんでした。
- 事前にすべての URL を収集して wget に渡すのは簡単ではありません。
- perl/python などで再実装することは、簡単な解決策ではありません。
- URLを名前付きパイプと wget -i - にパイプしようとしているのを見てきましたが、うまくいきません。データはバッファリングされ、アンバッファは使用できません。また、wget は処理前に EOF まですべての URL を収集すると思います。
- データは小さいので、圧縮が不足していても問題ありません。