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(テーブル名) とかで内容を確認しながらデバッグ.
| Permalink
|
Comments