なぜホームページを作るのですか?作るだけでは終わらない千客万来亭

fastcgi 再び その5(Java/gcj言語)

なにをいまさらJavaを持ち出してくるんだというお話ですね。

ここでは、Java と並列で gcj と書いたとおり、gcc に含まれる Java の実装である gcj を用いての fastcgi です。

gcj は Java ではありますが、Write Once Run Anywhere の中間言語方式だけでなく、ネイティブにコンパイルして実行形式を吐き出すことができる実装となります。

CNI を用いることで、C++ と連携させることが可能となりますので、結局のところ C++ から利用できる C のライブラリもそのまま使用することができることになります。

当然ながら、fastcgiのライブラリも利用可能ですから、「パフォーマンスが高く、ライブラリが充実していて、フレームワークを記述する上で必須条件となるオブジェクト指向も使える言語」という条件をすべてクリアしていることになるわけです。

ファイルは Java のコード、Java から生成させた C++ のヘッダ、そして CNI の実装を記述するC++の実装ファイルとなります。書かなければならないのはふたつだけですね。

まずは、Java のコードから。

class Hello {
  public static native void sayHello();
  public static void main(String[] args) {
    sayHello();
  }
}

native で、C++と連携するべきメソッドを指定しています。

sayHello の実装は、C++側のコード。

#include "Hello.h"
#include <fcgi_stdio.h>

void Hello::sayHello() {
  while (FCGI_Accept() >= 0) {
    printf("Content-Type: text/plain; charset=UTF-8\r\n\r\n");
    printf("Hello World!");
  }
}

本来はこんな形ではなく、fcgi をラップしたクラスを作るべきなんでしょうが、ここでは単純に Java でも fastcgi できる例を示すということでこんな形としてあります。

メインの処理ループは C++ ですので、処理速度はC++版の fastcgi と変わりません。

当たり前といえば当たり前の話ではあるのですが。

fastcgi 関連記事