Javascriptでmemcachedにソケット通信する

MOONGIFTで紹介されていたJNEXTを使うとブラウザからソケット通信をする事ができます。これを使ってmemcachedにソケット通信するモジュールを作ってみました。

10/9 ソースをcoderepos移しました add,replaceが使えるようになりました(使ってる人なんかいるのかね?)。

使い方

サーバ側

memcachedを起動させるだけです。CGIスクリプトを置く必要はありません。

memcached -d -m  -l 192.168.0.10 -p 11211 -u root
クライアント側

JNEXTをインストールします。
インストールが完了したら、auth.txtを編集してJNEXTが実行できるURLとライブラリを追記します。

file://           *
http://127.0.0.1  Sockets
http://example.com  Sockets

以下のライブラリをBODYタグに読み込みます。

<body>
<script type="text/javascript" src="jnext/jnext.js"></script>
<script type="text/javascript" src="jnext/sockets.js"></script>
<script type="text/javascript" src="cache_memcached.js"></script>

jnex.js,socket.jsはJNEXのライブラリでcache_memcached.jsがmemchashedに通信するモジュールです。

memcachedに接続

IPアドレスとポート番号を渡してnewします。これで接続が開始されます。

var mm = new CacheMemcached({ server: ['192.168.0.10',11211] });
set

keyとvalueを渡してセットします。日本語を渡す事も可能です(モジュール内で値をescapeしています)。

mm.set('hoge','hoge-value');
get

keyと関数を渡して値を取得します。サーバから値が返ってくると関数が実行され引数に値が入ります。

mm.get('hoge',function(r){alert('get-response-value>' + r);});
remove

指定したkeyの値を削除します。

  mm.remove('hoge');
flush_all

すべてのデータを削除します。

  mm.flush_all();
データオブジェクト

json.js等でJSONに変換すればデータオブジェクトの受け渡しも可能です。

var myObject = new Array('aa','bb','cc');
var myJSONText = myObject.toJSONString();
mm.set('hoge',myJSONText} );
mm.get('hoge',function(r){returnValue=r.parseJSON();})

memcachedプロトコル

protocol.txtプロトコルが書かれています。telnetで動作を確認する事ができます。

$ telnet 192.168.0.10 11211
set foo 0 0 7
aabbccd
STORED
get foo
VALUE foo 0 7
aabbccd
END

このやり取りをソケット通信で行っている訳です(割とシンプル?)。


モジュール名に"Cache"とか付けましたが、全然キャッシュじゃないですね(笑)。Cache::MemcachedみたいなAPIにしたかったんで、そう命名しました。
「何に使えるの?」と言われるとあまり思いつかないです、memcachedをクリア(flush_all)したいとかでしょうかね?考え中。