RubyによるAJP1.3実装

Ruby/AJP is an implementation of AJP1.3 in Ruby. Distributed under the term of LGPL.

RubyでAJP1.3(Apache Jserv Protocol 1.3)を実装しています。Perlだと本格的な Atami があるわけですが、Rubyでは見付からなかったので。発端は、先日Ruby CGIからTomcatに繋ぎたい局面があったこと。

AJPの資料は jk connectorのところの ぐらいで、あんまりドキュメント化されていないのでmod_jkTomcatのソースがドキュメントだったり。TomcatにGET/POSTぐらいはできるようになったので0.1を出すけれども、あんまり期待しないでください。AJPサーバー(App server)側を実装するにはまだ機能が不足です。

net/httpに似たインターフェースを目指してるので、次はクライアントとしての機能を充実させる。サーバーの実装もできるようにしたいところ。

以下は0.1実装中の発見。

  • 良く使われるHeaderのencodeはshouldではなくmustらしい。
  • C言語による実装を想定してるようなところがある。TomcatでもJNIで書いてあるし。
  • Packetって言うのは、あくまでもAJPのレイヤーの話で、TCPのパケットとは論理的には関係ない らしい。でも、AJP packetは論理上64Kまで大きくなれるのに、小さく切って送ってるのでだいたいTCPのパケットと一対一に対応する。

AJP自体、WebServer - AppServer間の通信効率を求めた仕様なのでpure Rubyで無理に実装するよりCで拡張ライブラリ書いた方が良いかもと迷ってます。それか、せめてAPI部以外の中身はOOを捨てて思いっきりCみたいなRubyで書くとか。どうでしょう?