« ついったー | 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

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/33589/14931468

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

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

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

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