通常 Java Servlet で実装する Ajax 非同期通信 Web サーバアプリケーションを C++ で書けないか調べていて,Wt ("Witty", a C++ Web Toolkit) というツールキットの存在を知った。Widget(画面構築部品のようなもの)志向の強い設計になっていて,Web 画面を Widget で組立てることができる。画像操作にも強い。メッセージを言語に応じて切り替える API も備えている。クエリを出す HTML や Java
私としては,クエリを出す HTML + JavaScript を別リソースとして用意し,サーバ側だけが Java ではなく C++ のアプリが動いている,というイメージのほうがわかり易いのだけれども,Wt の方式に則れば,いわゆるビジネスロジックのすべてをユーザから見えにくくするというメリットがある(HTML,Java
Wt は CMake と Boost C/C++ ライブラリを前提とする。これらをあらかじめ導入しておく。ここではその導入手順は割愛。Wt 最新バージョンは 3.2.1 であり,Wt ダウンロードページから取得できる。私は開発最中の最新 Git リポジトリから引っ張って来てインストールした。ここではそのトップディレクトリ名として wt を説明のために使うものとする。wt-
% cd ~/tmp % git clone http://www.webtoolkit.eu/git/wt.git
wt 直下にある INSTALL ファイルに導入手順が書かれている。オプション的に入れておくとよい画像処理ライブラリについてはこちらを参照のこと。以下のようにして Wt リソースをコンパイルする。
% cd ~/tmp/wt % mkdir build % cd build % cmake -DBOOST_DIR=/usr/local ../ % make
けっこう時間がかかる。ところが,私の Mac OS X 環境では,Boost ライブラリの取り込みでリンケージがことごとく失敗してしまい,libwt.
こういうとき,CMake で自動生成した Makefile を使っているシステムは,どこで何をやっているのか調査するのに大いに苦労する。リソースを grep しまくってリンケージ指定を探したら,link.
link.txt はうんざりするほど数がある。というわけで,配下の link.
#!/bin/sh # Web toolkit link option 訂正 for i in `find . -name "link.txt"` do cp $i $i.bak cat $i | sed -e \ 's/\/opt\/local\/lib\/libboost_thread-[^\.]*\.dylib/-lboost_thread/g' |\ sed -e \ 's/\/opt\/local\/lib\/libboost_random-[^\.]*\.dylib/-lboost_random/g' |\ sed -e \ 's/\/opt\/local\/lib\/libboost_regex-[^\.]*\.dylib/-lboost_regex/g' |\ sed -e \ 's/\/opt\/local\/lib\/libboost_signals-[^\.]*\.dylib/-lboost_signals/g' |\ sed -e \ 's/\/opt\/local\/lib\/libboost_system-[^\.]*\.dylib/-lboost_system/g' |\ sed -e \ 's/\/opt\/local\/lib\/libboost_filesystem-[^\.]*\.dylib/-lboost_filesystem/g' |\ sed -e \ 's/\/opt\/local\/lib\/libboost_date_time-[^\.]*\.dylib/-lboost_date_time/g' \ > $i.new mv $i.new $i done
ビンゴでした。これを実行した結果,リンケージはすべてうまく行った。sudo make install でインストールする。
例題プログラムもコンパイルしておく。こういうのがシステム仕様の理解・勉強にいちばん役立つ。
% cd ~/tmp/wt/build % make -C examples
コンパイルが通ったら,動かしてみる。Wt はアプリを FastCGI として動作させることができる一方,libwthttp とリンケージすることにより,なんとアプリそのものをスタンドアローンの HTTP/WebSockets サーバ(wthttp)として動作させることができる。添付の例題プログラムの一つ composer(簡易メールソフト)は wthttp サーバとして動作するようコンパイルされる。以下のオペレーションを行って動かしてみる。wthttp サーバ起動のオプション詳細はドキュメント 10.4 Wt httpd (command-line or configuration file) options を参照のこと。ロギングなどもでき,なかなかである。シンプルな分,おそらく高速に動作すると思う。
% cd ~/tmp/wt/examples/composer % ln -s ../../resources . % ../../build/examples/composer/composer.wt --docroot . \ --http-address 0.0.0.0 --http-port 8080
ブラウザでこのサーバにアクセスしてみた画面は次の通り。
いいものを見つけた。早速メーリングリストにも参加を申し込んだ。私のプーシキン・コンコーダンスのコントローラもこれで行くつもりで,いま API を研究中である。