« ついったー | Main | Programming Erlang 日本語訳 »

Wednesday, May 02, 2007

Erlangメモ.ets・yaws

Erlangで適当にサンプルコードを書いて練習中.
寄り道しながら作っているせいか,なかなか進まない.

その中でのメモ.

・yawsの中でetsを使いたい場合,yaws起動時にetsテーブルを作成する必要があるが,
 その場合は yaws.conf の ebin_dir の中にモジュールを置き,runmod = モジュール名,
 の指定を追加する.
 そうすると,yaws起動時にモジュールの start/0 が呼ばれるので,その中で
 etsテーブルの作成などを行う.

・etsテーブルは作成した後,作成したプロセスが消滅すると存在も消える.
 これはpublicにしていても同様.
 yawsのダイナミックコンテンツの中で使いたい場合は,以下のように
 適当なループをつけてプロセスを生存させておく.

start() ->
	ets:new(chatlog, [public, named_table]),
	ets:insert(chatlog, {log, []}),
	ets:insert(chatlog, {logid, 0}),
	loop().

loop() ->
receive
_ -> true
end,
loop().

・etsテーブルは,named_table指定をしておけば,他のプロセスから
 名前でそのままアクセスできるので便利.
 (多少のオーバーヘッドはありそう)

・yawsの yaws_api:parse_post() などで返るデータは,{key, value} 形式のタプルだが,
 keyはString型.マニュアルではatomとなっているが,たぶん問題があってやめたのだろう.
 (外部からいろんなキーを送りつけられると,Erlang VM 内のatom数の上限に当たって
  VMが止まる(?)とかの問題を起こしそう.
  マニュアル読んでいてまずくないのかなー?と思ったら,実際のコードの動きが違った.)

・yaws_api:parse_post() などで返るデータは,lists:key~ の関数を使うと便利に処理できる.

・ets:update_counter はあらかじめ指定する Key のデータを作っておかないといけない.

・yaws -i -T で起動するとシェルが使え,通信内容も全部見れるので便利.
 io:format() のデバッグ出力なども表示されるので開発しやすい.
 ets:tab2list(テーブル名) とかで内容を確認しながらデバッグ.

|

« ついったー | Main | Programming Erlang 日本語訳 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Erlangメモ.ets・yaws:

» Erlang メモ [へ〜たのめも]
みかログ: Erlangメモ.ets・yaws 修行不足のため、何が書いてあるのか良く別らず。帰ったら試す。 [Read More]

Tracked on Thursday, May 03, 2007 07:00 AM

« ついったー | Main | Programming Erlang 日本語訳 »