読者です 読者をやめる 読者になる 読者になる

rabbit-lifeが面白い

RabbitMQ Erlang JavaScript

rabbit-lifeはサーバー側をErlang、クライアント側をJavaScriptで実装したライフゲーム。マルチプレーも可能。

画面イメージとしてはこんな感じ。

ゲームとして面白いというよりは、アーキテクチャや使用しているライブラリが面白い。

もともとは、ここで公開されているRabbitMQの入門のスライドのデモのために作られたのだと思うが、マルチプレー型のオンラインゲームの通信にRabbitMQ(AMQP)を使うところと、JavaScriptでクライアント作るのにあたってHTTPで通信するのではなく、amqp-jsを使ってFlashを経由でAMQPで直接通信するというのが目から鱗。

使っているJavaScriptライブラリは、

など。jqueryは当たり前すぎるので省略したが、最近のJavaScript界の動向は全く知らなかったので、こういうライブラリもあるんだと勉強になった。

このrabbit-lifeはちょっと前から気になっていたのだが、cloneしてrakeしただけでは上手く動かなくてしばらく放置していた。もしかしたら特に問題なくビルドが通る環境もあるのかもしれないが、僕が成功した手順は以下の通り。

cloneして、server/vendor/rabbitmq-erlang-client-tipに以下のような修正を加える。

diff --git a/server/vendor/rabbitmq-erlang-client-tip/common.mk b/server/vendor/rabbitmq-erlang-client-tip/common.mk
index 265e0f3..e982cf1 100644
--- a/server/vendor/rabbitmq-erlang-client-tip/common.mk
+++ b/server/vendor/rabbitmq-erlang-client-tip/common.mk
@@ -128,7 +128,7 @@ ALL_SSL_COVERAGE := true
 SSL_BROKER_ARGS :=
 endif

-all: package
+all: compile

 common_clean:
        rm -f $(EBIN_DIR)/*.beam

さらにebinディレクトリを作る。

$ mkdir server/vendor/rabbitmq-erlang-client-tip/ebin

その上でビルドを実行。

$ cd server
$ rake build_rabbit_server

あとはREADMEにある通りに、Flash Policyサーバーと、クライアント関連ファイルを配信するHTTPサーバーを立ち上げる。

RabbitMQのサーバーとErlang用クライアントライブラリはわざわざvender以下のものを使わなくてもいいと思うが、ぱっと試すにはこの手順が最速なのかなぁ。