【雪だるま】bbsd⇔各cgi間のI/F仕様について考え・詰めていくスレッド
■ このスレッドは過去ログ倉庫に格納されています
雪だるま作戦において開発をすすめているbbsdでは、
+- [ フロントエンドサーバlive22x1 ] -- ユーザは
[ バックエンドサーバlive22 ] -+- [ フロントエンドサーバlive22x2 ] -- live22xという代表名で
制御プログラムbbsd +- [ フロントエンドサーバlive22x3 ] -- これらにアクセス
| | | dat直読みや、
dat subject.txt subback.html bbs.cgiやread.cgiやofflaw.cgi、
書きこみログ(芋掘り)ファイルなど (こちらは基本的に書き込み操作なし)
(書き込み操作はこちらで)
# 復帰/削除cgiなどについては、さてどっちかな => 今後の課題
という形で「ユーザの相手」と「各種ファイル処理」を複数のサーバに分業することにより、
さらなるパフォーマンスの向上を目論んでいます。
つまりこの場合、dat/subject.txt/subback.htmlは
バックエンドサーバで動作するbbsdというプログラムがリクエストに応じて生成し、
更新や場合によっては削除する形となります。
ということで、bbs.cgiをはじめとする従来2ちゃんねるで動いているcgiでは、
これらが同じサーバにあるつもりでファイル操作をしていましたが、
上記に示すように、少なくとも元本は同じサーバにはなくなるため、
何らかの形で対策を考慮する必要があります。
また現在、ID生成の種やSamba24や
timcount/timeclose等の規制関係で使用している一時ファイル等、
複数のフロントエンドサーバが同じ情報を、
何らかの形で共有する必要があるものもあります。
このスレッドではこれらの処理方法や実装方法について考えながら、
bbsdに持たせたい・持つべきな機能をあぶり出し、実装仕様を詰めていくことを目標にしています。 bbs.cgi とにらめっこ中、、、。
単純な質問で申し訳ないのですが、
$logfilename:$logline は、その「行為」ごとにとられる、ということかしら。
つまり、ログとらなくてもいい場合は、どうすればいいのかなと。 こんなふうでいいのかな。
my $md5line = &bbsd($GB->{FORM}->{'bbs'}, 'getmd5seed', "/dev/null:"); $md5line = &bbsd($bbs, 'getmd5seed', "/dev/null:");
しこんだ。 とれるみたい。
%./bbs.pl livejupiter getmd5seed /dev/null:test | cat -v
2005_11_25<>M-XM-{Y=M-^E^@.M-^_TcM-QM-/<M-^EM--0
で、どうしてこれはとれないのかな。
%./bbs.pl livejupiter chkthr (むぎゅー) 256 AAAAAAAA This_is_test /dev/null:test
Invalid argument %./bbs.pl livejupiter chkid kuromarusuretate AAAAAAAA 3600 6 6 /dev/null:test ./bbs.pl livejupiter getndats /dev/null:test
0 …ということで、仮組み込みまで終わったです。
今のところの問題は、>>162 の後半のやつですね。
なんでだろう。
でもまずは、順調と思います。
本日は、ここまでで。 >>159-166 乙です.
>$logfilename:$logline は、その「行為」ごとにとられる、ということかしら。
>つまり、ログとらなくてもいい場合は、どうすればいいのかなと。
"$logfilename:$logline" のところに ':' を含まない文字列を適当に指定すれば Ok です.
/dev/null でもログ出力はしませんが,ファイルオープンは試みてしまうので
':' を含まない文字列指定の方がわずかですがムダは少ないかと思います.
>で、どうしてこれはとれないのかな。
>
>%./bbs.pl livejupiter chkthr (むぎゅー) 256 AAAAAAAA This_is_test /dev/null:test
>Invalid argument
>>124
> my $value = bbsd($bbs, 'chkthr', $file, $key, $value, "$logfilename:$logline");
>
> ・ 引数 $n を廃止し,FIFO 段数として BBS_THREAD_TATESUGI 値を使用するよう変更.
引数が1個余分ですね.$n は廃止で,$key は整数値です. >>167
上: ありがとうです。うまくいきました。
下: おはずかしいです。修正して、ちゃんと動きました。 というわけで、ひとつ、仕様追加のお願いがあります。
>>155 ですが、
> Samba24 用汎用 DB チェック&登録:
> my $statnum = bbsd($bbs, 'chkid', $dbname, $id, $seconds, $nwarn, $nkick, "$logfilename:$logline");
を、
Samba24 用汎用 DB チェック&登録:
my ($statnum, $count, $second) = bbsd($bbs, 'chkid', $dbname, $id, $seconds, $nwarn, $nkick, "$logfilename:$logline");
にしていただくことは可能でしょうか。
$count, $second はSamba24でそれぞれ、
($count回目、$second sec しかたってない)
に、使っているです。
つまり、問い合わせ回数が何回目か($count)と、
前回の問い合わせからのインターバルが$second秒だったよ、という情報を、bbs.cgi側に返していただきたいなと。 あと、もう一つI/Fがほしいです。
・板名とスレッドキーで指定してbbsdを呼ぶと、該当するdatの1行目をそのまま返す
これができると、トラックバックに対応できます。
さみだれ式ですみませんが、よろしくおながいしますです。 それから、、、広告か。
ここに晒していいかどうかわからないから、メールしておくです。 ひとつ忘れてた。
これは公開情報っぽいから、ここに書こう。
http://qb6.2ch.net/test/flash.txt
にありますです。 つまり、./test/flash.txt にあると思ってよいです。>>173 おしりの
アニメ | CM | ゲーム | 映画 | 音楽 | テレビ | 日記
は、bbs.cgi から教えることにしたです(対応済み)。 purge...
とか、なってしまうのですね。< footnote
ちと、微妙かも。 …あと、Over1000やらスレストやら何やらで、書き込みリクエストがしくった場合の
エラー処理ハンドリングって、どうやればいいのかしら、、、。 >>169 実装完
Samba24 用汎用 DB チェック&登録:
my ($statnum, $count, $second) = split(/,/, bbsd($bbs, 'chkid', $dbname, $id, $seconds, $nwarn, $nkick, "$logfilename:$logline"));
Samba24 用汎用 DB チェック:
my ($statnum, $count, $second) = split(/,/, bbsd($bbs, 'peekid', $dbname, $id, $seconds, $nwarn, $nkick, "$logfilename:$logline"));
bbsd は直接 Perl 配列を返せないため CSV 文字列で返しますので,split() をかまして下さい.
>>170 実装完
>>1取得:
my $datline = bbsd($bbs, 'get1', $key, "$logfilename:$logline");
>>171-172 えーと,届いてません......というか,もし旧 E-mail (〜(at)super.win.ne.jp) 宛に
お送り頂いていたとすると,ISP が事実上破綻状態となっているため利用できなくなってます.
お手数ですがとりあえず sunos(at)saita.ma 宛に再度お送り下さい.折り返し新 E-mail もお知らせします.
>>177 $errmsg が空文字列以外ならエラーで,例えば 1000 レス越えや 512kB 越えなら
"Disc quota exceeded" (EDQUOT) を返し,スレストなら "Permission denied" (EACCES) を
返しますので,それに沿って処理すればいいかと. get1 (>>1取得)ですが,sub bbsd {} 中の
recv(SOCK, $str, 2048, 0)
となってる部分の 2048 をもっと大きい数値にしないと,
>>1文が長い場合に尻切れになってしまうかも知れません. おー、帰ったら早速組み込むです。
で、すぐメール出しなおします。 bbsd 側の SO_SNDBUF も大きくした方がよさそうなので,その点も変更. 洋ぽん問題の対応を先にするです。
まずは、メールフォワードしておくです。 >>183 メール受け取りました.で,広告の件ですが......
インクルードファイルの情報は非公開とのことなんですが,bbsd.c 自体が
今のところソース公開状態なんで,それを直接 bbsd.c に埋め込むと
結果的には公開してしまうことになってしまうんですよね......
ということで,いくつか方策を考えたんですが
1. bbsd.c も非公開化する.
2. 広告テキストだけでなく,インクルードファイル名も bbsd 呼び出し時の
引数として渡すようにする.
3. index.html のテンプレートは bbsd.c にハードコーディングではなく,
外部ファイル化してそれを利用する形にする.
4. その他何かいい方法.
さて,どういう形がいいでしょうか...... >>184
私は、広告の場所も公開して問題ないとは思うのですが、、、。
1. は、いやですね。
2. がいい気がします。
基本的に、広告は3ブロックなので、
'ad1'
'ad2'
'ad3'
みたいな引数で、DOCROOTからの相対パスで
広告のファイル名指定できるようにしておくというのはどうでしょう。
で、それをそのまま読んでいただければと。 >>185 は、
'ad1' は hoge.txt
'ad2' は test/munya.txt
'ad3' は munya.txt
みたいなかんじで、bbsdに教えておくということです。 >>185-186 では,インクルードファイル名も引数化ってことですね.
ただ,bbsd に渡すパス名は,$logfilename も touch コマンドの引数も
$DOCUMENT_ROOT/test/ からの相対パスという形になってますので,
それに統一した方がいいと思います.これは,bbs.cgi 自体の場所からの
相対パスってことですね. >>187
了解です。
それ(testから)に合わせていただいて、問題ないです。 Samba は、無事動いたです。
>>182
そっか、「UDPいっぱつもの」なんですよね。
大きくする(8192)ことは簡単ですが、何か副作用ありますかね。 あと、datを chmod 444 すると、
書けたように見えて書けないというのが、発生するみたいです。 >>189 まぁ,バッファ用にその分メモリ食うぐらいかなと思います......
>>190 そのスレに手動で
bbs.pl livejupiter (key) 'a<>a<>a<>a<>' foot log
とか実行するとどうなりますか? >>191
そのぐらいなら、たいしたことはなさそうですね。
8192にしておくか。
>>191
chmod 444 してから、ってことですかね。 >>192
>8192にしておくか。
dat の1行そのまま返すので,本文の制限容量より多めの方がいいかも知れません.
>chmod 444 してから、ってことですかね。
そうです. %./bbs.pl livejupiter 1132860497 'a<>a<>a<>a<>' foot log
Permission denied
ふうむ。ってことはbbs.cgi側すね。
すんませーん。でなおしてきます。 bbs.cgiの虫でした。
さっきのは、虫していただければと。カサコソ
--------------------
書込み中・・・
--------------------
ERROR!
ERROR:このスレッドには書き込めません。
ホストbanana637.maido3.com
名前: ◆MUMUMUhnYI
E-mail: sage
内容:
ほい。
こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。
アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。自分で解決してみよう! 書き込めない時の早見表 広告対応しますた.書き込み API の引数追加になります.
# ずいぶん引数が多くなってきました(w
my $errmsg = bbsd($bbs, $key, $datline, $footnote, $adfile1, $adfile2, $adfile3, $adline, "$logfilename:$logline");
$adline が一番下の小さいやつです.
ただ,現状では $adfile1 には外枠が含まれておらず(つまり bbsd 側で枠を作成),
一方 $adfile2, $adfile3 には外枠が含まれ(つまり bbsd 側では枠を作成せず),
そのため今のままでは枠の外観が不統一になってしまいますね. >>196
> # ずいぶん引数が多くなってきました(w
リファレンスで渡すといぃかも?
my $errmsg = bbsd(
[
BBS => $bbs,
KEY => $key,
DATLINE => $datline,
:
:
]
);
みたいな。。。 >>197 単純に引数を羅列するよりリファレンスで渡す方が
無駄なコピーとかは発生しないようになるんですかね.
ただ,sub bbsd {} 自体はあまりインテリジェントではなく,
単純に引数を連結して bbsd にパケット投げてるだけなんで,
ハッシュリスト形式にするメリットはあまりないかも...... live22xでスレ立てしようとしたらこうなりました。
●ログインしてました
ERROR!
ERROR:不明なエラーが発生しました。
(board:livejupiter key:1132976035 errmsg:1132976035)
このメッセージをコピペして、運用情報板で報告していただけるとありがたいです。
ホストiv66.opt2.point.ne.jp
sss
名前: 名無しさん@お腹いっぱい。
E-mail:
内容:
test
これはこっちでいいのかな
それともbbs.cgiスレかな?
Monazilla/1.00 (JaneLovely/0.1.6) うーん、IFをつめてくスレだったからやっぱbbs.cgiスレのほうが良かったですね 調整途中でした。>>199-201
不具合報告は、別のところがよかったすね。
スレはないので、、、。bbs.cgi スレにお願いです。 で、ちょっと対応します。
そうか、新スレの時はスレッドキーが返るのを忘れてた。 >>198
おそらく効率的では「ない」かと(苦笑)@リファレンス私→デリファレンスして連結して
でも、可読性や引数の抜けによる思わぬ鰓を減らすのには十分威力があるんじゃないかなぁと♪ >204 ふむふむ......確かに可読性はよくなりそうですね.特に >>196 ぐらいになると
単純な引数羅列では混乱しそうで(w ただ,bbsd 側でも単純な引数羅列ならデリミタで
ちょん切るだけなのに対し,key-value ペアだともうちょっと働かないといけなくなりそう
というのもあるんで......引数の過不足には現状でも "Invalid argument" を返すんで(ex.>>162),
とりあえず例えばコメントで引数について注釈付けておくとかしておいてもらえば
my $errmsg = bbsd(
$bbs, # 板名
$key, # スレッドキー
$datline, # dat への追記内容
:
:
);
何とかなるかなぁという気もしたりしなかったり...... >>205
ソ、ソースをごらんになったのですか(w。
# bbsdに書き込みコマンドを送る
my $errmsg = &bbsd(
$GB->{FORM}->{'bbs'},
$GB->{FORM}->{'key'},
$GB->{OUTDAT},
$GB->{version},
$FOX->{headadfile},
$FOX->{putadfile},
$FOX->{maido3adfile},
$FOX->{lastad},
"$DATALOG:$GB->{LOGDAT}"
); >>196
ということで、広告対応しました。
真ん中の広告はbbs.cg内にハードコーディングで
単独ファイルとして切り出されてないので、まだ出ないです。
(ちょっと、切り出してみるか)
あとはご指摘の通り、外観が不統一問題ですか。
どうすればいいんだろう。 >>207
>あとはご指摘の通り、外観が不統一問題ですか。
>どうすればいいんだろう。
広告ファイルを手直しできるなら,ファイル側で枠ありか枠なしのどちらかで
統一すればいいんでしょうけど...... ファイル側に、原因があるですか。
広告部分は管理人の管轄で、私がどうがんがっても「神の領域」だからなぁ。
ううむ。 広告ですが,CSS を使った力業ってのをちょっとやってみますた.
bbsd を更新後,いったん index.css を消してから復帰をかけてみて下さい. 2番目のはまぁまぁの感じですが,3番目のがちょっとってとこですか...... 板トップから read.cgi をクリックで起動すると(例えば「全部読む」を押す)、
名前欄のクッキーが文字化けするようです。
文字コードの問題かしら。 再び力業......再度 bbsd 更新,index.css 消去の上復帰かけてみて下さい.
>>215 read.cgi の JavaScript 部分も
http://www2.2ch.net/snow/index.js
を利用するようにすれば解消するのではないかと...... >>216 前半
やりました。
http://live22x.2ch.net/livejupiter/
おぉ。
>>216 後半
これって、今の時点で全部のread.cgiにやると、いまいちなんでしたっけ。 >>217 現状のままでは不整合があるかも知れませんが,雪だるまサーバ以外の index.html も
>>216 の index.js を利用するようにすれば不整合はなくなると思います. >>218
なるほど、同期とってやる必要があると。
前に見たような機がするのですが、
これにすると、どのへんがよくなるんでしたっけ。 >>219 現状のエンコードしていない Cookie 設定では Firefox や Mozilla などで
文字化けが発生しますが,その index.js のようにエンコードするとその問題が解消します. ただ,NAME と MAIL の Cookie 設定はクライアント側 JavaScript にお任せになるので,
bbs.cgi 側ではそれらの Cookie 設定はしないようにしてもらった方がいいです. >>220-221
なるほどです。
bbs.cgi と read.cgi で同時対応することになると。
雪だるまと裕香、bbs.cgiスレで別途、すすめるかんじですね。 ひとつ、質問です。
今Samba24で「永久」になっちゃった場合って、
そのレコードはどのタイミングでexpireがなされるんでしたっけか。 自己解決しました。
上に、ちゃんと書いてあるですね。
ちと休憩しながら、ロードバランシングのことでも調べるか。 ここいらで2ch wiki雪だるま作戦ページに現状を書いていきたいのですが、よろしいでしょうかね? >>226
了解です。
では当該ページに更新作業中宣言をいれておきましたのでしばしお待ちを。
実装の箇条書きだけあげておきました。
実装の詳細ははしょるつもり。
# 220レスのチェックはかなりつらいですわw
あと僭越ながら概要図を描いてみました。
wiki添付でupできんのでispへあげときました。
ttp://v.isp.2ch.net/up/9827b66877cf.jpg
>>227-228
まずはおつです。
図とか微妙な部分がありますが、
そのへんは、おいおいと。 1001 名前:1001[] 投稿日:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
これ、今までと同じにしてくださいです。
全角で1000とか、そういうの。 Visioかぁ。。。
林檎機版もあるといぃよなぁ。。。 大丈夫みたいです。
1001 名前:1001[] 投稿日:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。 このへんが、出たみたいです。
質問・雑談スレ208@運用情報板
http://qb5.2ch.net/test/read.cgi/operate/1132976990/46
46 名前:動け動けウゴウゴ2ちゃんねる[] 投稿日:2005/11/26(土) 20:01:04 ID:zBsPZFmx0
こんなん出たから貼るけど、ここでいいのかなぁ?
ERROR:不明なエラーが発生しました。
(board:livejupiter key:1133001202 errmsg:No such file or directory)
このメッセージをコピペして、運用情報板で報告していただけるとありがたいです。
【しゃけ】雪だるま作戦に思いを馳せながら雑談するスレッド Part27
http://aa5.2ch.net/test/read.cgi/nanmin/1132754646/458
458 名前:名無し草[] 投稿日:2005/11/26(土) 23:53:29
ERROR:不明なエラーが発生しました。
(board:livejupiter key:1133016767 errmsg:File exists)
このメッセージをコピペして、運用情報板で報告していただけるとありがたいです。 質問・雑談スレ208@運用情報板
http://qb5.2ch.net/test/read.cgi/operate/1132976990/66-67
ということは、ENOENTの時は「そんなスレッドないです。」かな。
EEXISTS は、、、。 >>236-237 ENOENT は存在しないはずのスレに書き込みしようとした時に出ますね.
EEXIST はスレ立て時にリトライ回数上限(16)に達してしまった場合に起こりますね. >>238
了解です。
ENOENTは「スレッドがありません。」
EEXISTは「別の人が同時刻にスレッドを立てようとしています。ごめんなさい。」
にするです。 >>240 乙です.わかるかと思いますが一応......タイムアウト時間は
use constant BBSD_TIMEOUT => second;
のところで調整できます.あと
use constant BBSD_HOST => inet_aton('host');
use constant BBSD_PORT => port;
というのが現在は定数になってますが,これは今後 live22 以外にも雪だるまを
使うようになったら,各ホストに対応する接続先に切り替えられるように
した方がいいですね. >>241
ですね。< タイムアウト
で、host, port は、引数で与えるとか、あるいはどこかに config を書いておいて
bbs.cgi の船出航時に読むとかの応用もあるかなと。 で、先日ちょっと書いたトラックバックへの対応ですが、
http でバックエンドにdatをとりにいくように bbs.cgi で対応したので、
bbsd での対応は、不要になったです。 >>242 鯖ごとに config ファイルを置いてそれを読み込むってのがいいかもですね.
>>243 なるほど.まぁ get1 コマンドはとりあえず残しておきますが.
ただ,HTTP を使うなら,バックエンドではなく localhost から取ってくれば
キャッシュを有効活用できてその分バックエンドの負担を減らせるかも知れません. >>244
なるほど。
キャッシュを活用させるためには、どうやってとりにいけばいいのかしら。
read.cgiの特性上、今はlive22x.2ch.netという名前は、live22x[123]の中では、
live22.2ch.netの裏口につけてあったりして。 >>245 ん〜と,普通に localhost 宛に HTTP リクエストを発すればいいかと.
もし VirtualHost を使っているのなら,"ServerAlias localhost" を設定して
localhost 宛のリクエストがその VirtualHost 宛として扱われるようにすればいいですね. >>246
なるほどです。
本日午後以降多忙のため、別途ぼちぼち。 >>247 乙です.というか,Apache 側で ServerAlias とか設定しなくても,
localhost に接続しつつ Host ヘッダを live22x.2ch.net にすればいいですね.
例えば LWP 使ってるなら
my $req = HTTP::Request->new(GET => "http://localhost/livejupiter/dat/1111111111.dat");
$req->header(Host => "live22x.2ch.net");
とかすればいいかと. >>248
use LWP::Simple;
$firstlog = get("http://$ENV{SERVER_NAME}/$GB->{FORM}->{bbs}/dat/$GB->{FORM}->{'key'}.dat");
$firstlog =~ s/\n.*//g;
なんていう、超手抜きコードですね。
帰ったら、>>248 を試してみるです。 >>249 LWP::Simple ではヘッダ指定とか出来なさそうなので,LWP::UserAgent
などを使ってもうちょっと手をかけなければならないかも知れません...... >>250
みたいですね。
つまり「へんなところで手抜きしちゃ だめですよ」ってことすか。
トラックバックは所詮トラックバックなので(= とりあえず動いているのと、
今は量で効いてこないんで、優先度高くない)、おいおい、マターリってかんじで。 まぁ手をかけるといっても数行程度ですが......
use LWP::UserAgent;
my $ua = LWP::UserAgent->new(agent => '', timeout => 5);
my $res = $ua->get("http://localhost/$GB->{'FORM'}->{'bbs'}/dat/$GB->{'FORM'}->{'key'}.dat", Host => $ENV{'SERVER_NAME'});
if ($res->is_error) {
DispError2($GB, 'ERROR!', 'ERROR:>>1取得失敗');
}
my $firstlog = (split(/\n/, $res->content, 2))[0]; >>252 を組み込みました。
# 051205 雪だるまでのトラックバック送信部分を改良(キャッシュが効くように) by む 実況鯖スレでは擁護に回っているけれど、
live22b[12]のテストが足りなかったんじゃ、という気は正直あります。
heartbeat体制で最速1000テストやったわけでもないし。 >>256
たしかに。
でも、書き込み系のテストは割とすぐできるけど、
読み出し系のテストは、実戦以外でやるの、むずかしいす。
まぁ、言い訳ですが。 復帰の呪文ですがー
今実際に使ってるのは通常復帰とsage復帰の2種類じゃないでしょうかー
(というか、それで足りているはずというかー)
復帰補さんが登場した時に、古い呪文なんたら、ってことがあったようなー
厳密にはメールで呪文のやりとりして確認するしかないんじゃないでしょうかー ■ このスレッドは過去ログ倉庫に格納されています