X



トップページ運用情報
498コメント239KB
【雪だるま】bbsd⇔各cgi間のI/F仕様について考え・詰めていくスレッド
■ このスレッドは過去ログ倉庫に格納されています
0001root▲ ★
垢版 |
NGNG
雪だるま作戦において開発をすすめている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に持たせたい・持つべきな機能をあぶり出し、実装仕様を詰めていくことを目標にしています。
0106 ◆TWARamEjuA
垢版 |
NGNG
>>105
個人的にbbs.cgiは内容には一切触れずに規制処理(DNS系統:省Rock54+BBR)だけ行えば?なぁんて妄想もしていたりします。
単一bbsdでは負担が掛かるようなら子供を産んでも良さそうな。とかとか。。。
0107105
垢版 |
2005/11/07(月) 23:36:28ID:qaYfXUl/0
同じこと言ってましたね。
ちゃんと読んでませんでした、申し訳ない。

bbsdとのI/Fは変えずに、単純に、bbs.cgi を frontend/backend に役割を分けて
しまう手もありますね。

0108root▲ ★
垢版 |
2005/11/08(火) 02:05:40ID:???0
>>105
書きこみ時に bbsd で共通部分の処理をするというセンスは、
次の段階としては、ありなのかな。

ただ、基本的にファイルI/Oと共通データベース処理に専念してほしい予感も。
そもそも、bbsd.cgiのバックエンド的な位置づけなわけだし。
0109root▲ ★
垢版 |
2005/11/08(火) 16:31:58ID:???0
bbsdって1000超えした時って、どういう処理をするんでしたっけ。

1) このスレッドは1000を超えました。 <br> \
もう書けないので、新しいスレッドを立ててくださいです。。。
を書くかどうか
2) 板名/1000.txt を読むかどうか
0110◆cZfSunOs.U
垢版 |
2005/11/08(火) 21:32:03ID:+RowFQSH0
>>109 1000.txt が存在すればそれを用い,なければ 1) の内容で dat に書き込みます.
0113動け動けウゴウゴ2ちゃんねる
垢版 |
2005/11/11(金) 14:27:16ID:lQB+cJ3w0
久しぶりに来たが、ぜんぜん進展してないの?
つうか、まとめサイトは?
テンプレすら張ってないし。
0115root▲ ★
垢版 |
2005/11/11(金) 14:54:00ID:???0
>>113
もうすこしかな。

Check_HardPosting (連続投稿ですか?) のところの
しくみの洗い出しと理解を、先にやりたいです。

それができると、雪だるまのためのbbs.cgi洗い出しは、
概ねできたことになるはず。
0116root▲ ★
垢版 |
NGNG
timecount/timeclose の処理も、FIFOですね。
ここに書こうと。
0117root▲ ★
垢版 |
NGNG
簡単にいうと、こんなかんじ。

1) timecount分のFIFOを準備しておく
2) 投稿に固有のID(*1)をキーに、FIFOを探す
3) FIFO内にそのIDがtimeclose個以上あったら「連続投稿ですか? (見つかった回数)回」エラー
4) IDをFIFOに積む、古いものからところてん式に押し出されていく

(*1)IPアドレスまたは携帯固有番号またはp2の番号

これなら、先だって用意していただいたものと同じようなのを
もひとつ準備していただければ、できそうですね。
0118root▲ ★
垢版 |
NGNG
[1-10] 1-A-d timecount/timecloseのための記録用ファイル 一

についてです。

ということで、bbsdでは、

・SETTING.TXTを読んで、板ごとにtimecount段数分のFIFOを準備する
・FIFOには、何か文字列(とりあえず256バイト以内ぐらい)が積まれる
・bbs.cgiは「板」「ID」を引数とし、bbsdに「これについて調べてちょ」と聞く
・bbsdは指定された板のFIFOを検索して、指定されたIDがtimeclose個以上見つかったら、
 その旨をbbs.cgiに返す。ただし、このときはbbsdはIDをFIFOに積まない
=> bbs.cgi はエラー処理(連続投稿ですか)をする
・timeclose個未満だったら、そのIDをFIFOに積み、bbs.cgiには正常を返す
=> bbs.cgi は正常系の処理をする

という形のAPIをbbsd側で作っていただけると助かります。

で、これは「記録用ファイル」と書きましたが、bbsd的にはメモリ上のみでよいと考えます。
0119root▲ ★
垢版 |
NGNG
あとは、>>92 ですか。

これらは基本的には、データベースですね。

ID、時間の要素、回数の要素

というDBをbbsd側で作っていただき、フロントからはそれに登録したり、
参照したりするかんじになるかなと。

詳細は、読みきったところで。
0120◆cZfSunOs.U
垢版 |
2005/11/13(日) 19:10:56ID:s+Rpgd2P0
>>115-119 乙です.そちらもぼちぼち実装していきます.

ところでふと思ったんですが,timecount / timeclose データの FIFO の段数は
SETTING.TXT の timecount 値ということですが,となるとスレッド立てすぎデータ (>>93)
の FIFO 段数 $n も,ひょっとするとやはり SETTING.TXT の BBS_THREAD_TATESUGI 値
だったりするのでしょうか? もしそうだとすると......当初仕様通り bbsd 呼び出し時の
引数として $n を渡すのがいいのか,それとも bbsd 側で SETTING.TXT から取得するのがいいのか,
どうなんでしょうね.微妙なところかも知れませんが......
0121root▲ ★
垢版 |
NGNG
>>120
おぉ、鋭い指摘。

ちょっと、該当部分見てみるです。
0122root▲ ★
垢版 |
NGNG
読み直しました。

ご指摘のとおり、段数はbbs.cgi側からは要らないですね。

> - 「板名」「FIFOファイル」「FIFO段数」「登録キー」「登録データ」を引数として、bbs.cgiから呼び出し

を、

> - 「板名」「FIFOファイル」「登録キー」「登録データ」を引数として、bbs.cgiから呼び出し

つまり、

> my $value = bbsd($bbs, 'chkthr', $file, $n, $key, $value, "$logfilename:$logline");

の、$n は bbs.cgi 側から指定しないことにして、
bbsd が SETTING.TXT から TATESUGI を読んで、それを使う

ことにしていただければと思います。
0124◆cZfSunOs.U
垢版 |
2005/11/14(月) 22:24:59ID:tChr8Idl0
[1-10] 1-A-d timecount/timecloseのための記録用ファイル 一 (>>118)
    my $n = bbsd($bbs, 'chktimecount', $id, "$logfilename:$logline");

    ・ 段数 timecount の FIFO をオンメモリで作成.
    ・ $id のデータ数が timeclose 以上ならば戻り値としてそのデータ数を返す.
      FIFO データは変更せず.
    ・ $id のデータ数が timeclose 未満ならば戻り値として 0 を返す.
      FIFO に $id のデータを追加.

[1-9] 1-A-c スレッド立てすぎです、のための記録用ファイル 一 (>>93, >>122)
    my $value = bbsd($bbs, 'chkthr', $file, $key, $value, "$logfilename:$logline");

    ・ 引数 $n を廃止し,FIFO 段数として BBS_THREAD_TATESUGI 値を使用するよう変更.
----------------------------------------------------------------------
ここまで実装しますた.
0126root▲ ★
垢版 |
NGNG
Samba24の処理

a) Samba24用DB初期化用API

bbsdはbbs.cgi船が起動する時に指令を受ける
(bbs.cgiは最初にこの指令を出すように組まれる)
入力: 板名bname、秒数s

bbsdが起動して最初に指令を受けたら板別にDBを作り、
秒数sや回数nが異なった指令を受けたら、DBをconfigしなおす。
ただし、DBに蓄えているものは保持する。
指令が既にあるものと同じ秒数や回数だったら、何もしない。

万一a)の前にb)を受けたら、常に正常終了でよい。
# 最大10分、Samba24のDBが作られなくなりますが、、、。

# HDD上にDBをダンプするなり作るなりして、そこに前にあったbnameやsを入れるのもありです。
# というか、そのほうがよさげか。そうすればa)が来なくてもサービスできるですね。

# 将来秒数sはSETTING.TXTになるとのこと。
0127root▲ ★
垢版 |
NGNG
(続き)

b) Samba24用DB登録&チェック用API

1) 書き込みリクエストがあると、bbs.cgi は投稿に固有のID(*1)をキーに、
Samba24用DBに問い合わせを出す
入力: bname、ID

(*1)IPアドレスまたは携帯固有番号またはp2の番号

2) bbsdは投稿に固有のIDをキーに、Samba24用DBを検索する

DBでは、
「そのIDで問い合わせを受けた通産回数」と「そのIDで問い合わせを受けた最後の時間」
を保持している

今まで1回もそのIDで問い合わせを受けたことがなければ、
DBに「ID、1回、その時間」を登録して、正常終了を呼び出し元に返す
0128root▲ ★
垢版 |
NGNG
(続き)

3) そのIDで問い合わせを受けたことがある場合は、

3.1) もし、前に問い合わせを受けてからs秒以上経過していた場合には、
DBのそのIDのエントリをリセット(*2)して、正常終了を呼び出し元に返す
(*2)「ID、1回、その時間」にする

3.2) もし、前に問い合わせを受けてからs秒未満だった場合には、
DB側のそのIDのエントリの回数により、下記のように動作が分かれる

3.2.1) もし、そのIDでの通産問い合わせ回数が注意回数
(デフォルト3回、何かで変更可能になっているとうれしい)以下だったら、
DBの「ID、通産回数、最終時間」を更新し、
「異常ステータス1」を呼び出し元に返す

3.2.2) もし、そのIDでの通産問い合わせ回数が注意回数を超えているが、
規制回数(デフォルト5回、何かで変更可能になっているとうれしい)以下だったら、
DBの「ID、通産回数、最終時間」を更新し、
「異常ステータス2」を呼び出し元に返す

3.2.3) もし、そのIDでの通産問い合わせ回数が規制回数を超えたら、
DBを「ID、永久」にし、
「異常ステータス3」を呼び出し元に返す

3.2.4) 「ID、永久」の状態になった以降は、s秒以上の時間を空けた問い合わせが
あったとしても、すべて「異常ステータス3」を呼び出し元に返す
0129root▲ ★
垢版 |
NGNG
c) Samba24用DBリセット用API

F22から呼ばれる。
これを呼ぶと、そのbbsdで管理しているSamba24用DBの中身は全部ゼロクリアされる
ただし、a) で初期化した値はそのまま残る

d) Samba24用DB状況調査用API

F22から呼ばれる。
これを呼ぶと、いくつのIDがSamba24用DBに登録されているかを返す
0130root▲ ★
垢版 |
NGNG
…というかんじです。日本語が、微妙かもしれないですね。
変なところがあったら、書いてくださいです。> SunOSさん

日本語で説明を書き下すと、以外に複雑な形になってしまいましたが、
実際の中身は、それほどのものでもないです。

ようは、同じIDで短い時間の間に何度も何度もやると、だんだんと出世していって、
そのうち永久になっちゃいますよ、っていうかんじです。
それを、コスト低く実現していると。

今日は、こんなところで。
0131root▲ ★
垢版 |
NGNG
…と、ここまで書いて、
s秒をbbsdで管理するか、bbs.cgiで管理するか、
微妙なかんじもしてきました。

つまり、bbsdでは「回数」「前の問い合わせからの経過秒数」を戻りにして、
Sambaの判定は、bbs.cgiでやらせたほうがいいんじゃないかなと。

その路線だと、、、。ちょっと、再度考えてみるですかね。
0132root▲ ★
垢版 |
NGNG
>>131 は別途、明日以降考えてみるです。

そんでは、今日はおやすみなさい。
0133◆cZfSunOs.U
垢版 |
2005/11/20(日) 08:54:55ID:EFjCcJ0V0
>>126-132 乙です.処理内容のイメージはだいたいつかめました.
問題は設定値(規定秒数・注意回数・規制回数)の扱いというところですか.

># 将来秒数sはSETTING.TXTになるとのこと。

というのを雪だるまを機に実施して,そうした設定値をすべて
SETTING.TXT から取得できるようにするのも一案かも知れませんが,
それができなければどうするかというところで......

「a) Samba24用DB初期化用API」と「b) Samba24用DB登録&チェック用API」
を別々にした場合,>>126 でも言及されているように a) より b) が
先に来るという可能性もあるのですが,それなら両者を統合して
「b) Samba24用DB登録&チェック用API」の引数でそれらの設定値も
一緒に渡すというのも一案かも知れませんね.いずれにせよ
秒数や回数の判定は登録&チェックの段階で行うことになりますし.

あるいは >>131 のように設定値に基づく判定は bbs.cgi 側が行って
bbsd は登録のみ行うということも考えられますが,その場合
規定秒数以上だった場合のリセットが行えないのが問題ですかね.
0134◆cZfSunOs.U
垢版 |
2005/11/20(日) 10:01:50ID:EFjCcJ0V0
あと,規定秒数以上経過していたエントリは消していかないと,DB がどんどん肥大化
していきそうな気もしますね(その対策として c) があるのだと思いますが,
その呼び出しが来る前の段階で肥大化を防げればその方が良さそうな気もします).
ということで,やはり規定秒数は何らかの形で bbsd が知っておいた方がいいかも知れません.
0135root▲ ★
垢版 |
2005/11/20(日) 21:10:44ID:???0
>>133
どもです。

> 問題は設定値(規定秒数・注意回数・規制回数)の扱いというところですか.

そういうことですね。
なんか「ステートレス」「ステートフル」っていう話か。

> 「a) Samba24用DB初期化用API」と「b) Samba24用DB登録&チェック用API」
> を別々にした場合,>>126 でも言及されているように a) より b) が
> 先に来るという可能性もあるのですが,それなら両者を統合して
> 「b) Samba24用DB登録&チェック用API」の引数でそれらの設定値も
> 一緒に渡すというのも一案かも知れませんね.いずれにせよ
> 秒数や回数の判定は登録&チェックの段階で行うことになりますし.

これ、いいかもですね。
毎回bbsdに引数を全部渡せばいいのか。

>>134
そですね。DBのレコード毎にexpireできる仕組みを実装していただけると、
いいようなかんじで。

ちょっと、これらの路線で改めて仕様考えてみるです。
0136root▲ ★
垢版 |
2005/11/20(日) 22:11:01ID:???0
a+b) Samba24用汎用API、●でスレッド立て過ぎにも使用

書き込みリクエストがあると呼ばれる。
引数: bname, ID, s, w, k

bname: 板名
ID: IPアドレスまたは携帯固有番号またはp2の番号または●セッションID
(任意の文字列として取り扱えればOK)
s: 秒数 (s > 0)
w: 注意回数 (w >= 0)
k: 規制回数 (k >= w >= 0)

処理内容:

今まで1回もそのIDで問い合わせを受けたことがなければ、
DBに「ID、1回、その時間」を登録して、正常終了を呼び出し元に返す。

そのIDで問い合わせを受けたことがある場合は、

もし、前に問い合わせを受けてからs秒以上経過していた場合には、
DBのそのIDのエントリをリセット(*2)して、正常終了を呼び出し元に返す
(*2)「ID、1回、その時間」にする。

(続く)
0137root▲ ★
垢版 |
2005/11/20(日) 22:13:42ID:???0
(続き)

もし、前に問い合わせを受けてからs秒未満だった場合には、
DB側のそのIDのエントリの回数により、下記のように動作が分かれる。

1) もし、そのIDでの通産問い合わせ回数が注意回数w以下だったら、
DBの「ID、通産回数、最終時間」を更新し、
「異常ステータス1」を呼び出し元に返す。

2) もし、そのIDでの通産問い合わせ回数が注意回数wを超えているが、 規制回数k以下だったら、
DBの「ID、通産回数、最終時間」を更新し、
「異常ステータス2」を呼び出し元に返す。

3) もし、そのIDでの通産問い合わせ回数が規制回数kを超えたら、
DBを「ID、規制発動」にし、
「異常ステータス3」を呼び出し元に返す。

4) 「ID、永久」の状態になった以降は、s秒以上の時間を空けた問い合わせで
あったとしても、すべて「異常ステータス3」を呼び出し元に返す。
0138root▲ ★
垢版 |
2005/11/20(日) 22:16:23ID:???0
(続き)
あ、「ID、規制発動」になおしてください。< 4)

「ID、規制発動」の状態になってから3600秒(1時間)経過したら、
あるいは最後の問い合わせから3600秒経過したら、
そのIDのエントリをDBからexpireする。
0139root▲ ★
垢版 |
2005/11/20(日) 22:22:20ID:???0
これで、bbs.cgi側から普段使うAPIはひとつにできそうです。

で、●でスレッド立てすぎです、にも、応用できるですね。

bname: 板名
ID: ●のID
s: 3600
w: 6
k: 6

とかやれば、1時間で6つまでしか同じ●でスレッド、立てられないはず。

<チラシの裏>
うまくやれば、●を使ったスレつぶしにも対応できそうな気がしますが、
それは同じIDでDBを複数持たせる必要があるのかな。

あと、このI/Fを利用して、他サーバのbbs.cgiからex14のbbsdに通信して、
news4vipに関するデータを参照するとか(以下略。
</チラシの裏>

で、これをすればF22での定期クリアは必要なさそうな気もしますが、
メンテナンス用に、以下のI/Fは準備いただけると。
0140root▲ ★
垢版 |
2005/11/20(日) 22:23:41ID:???0
以下というのは、あと >>129 のやつですね。

とりあえず、こんなところでどうでしょうか。
0141root▲ ★
垢版 |
2005/11/20(日) 22:25:14ID:???0
で、あと、
これまで出た中で、詰めなければいけない仕様って、あったっけか。
0142root▲ ★
垢版 |
2005/11/20(日) 22:28:18ID:???0
…で、私のほうでも、
bbs.cgi 見直してみるです。

この目的のために、かなり整理整頓したわけで。
0143◆cZfSunOs.U
垢版 |
2005/11/21(月) 00:18:31ID:+sSOM0E80
>>135-142 乙です.で,確認しておきたい点としては,この API 用の DB は
オンメモリで完結ということでもいいのでしょうか,ということと,
Samba24 と ● のデータを1つの DB に混在させる形でもいいのでしょうか,
というところです.


あと,確認事項で残っているものはこれでしょうかね.

[1-3] 1-B-a index.htmlの広告ファイル1 四
[1-4] 1-B-a index.htmlの広告ファイル2 四
[1-8] 1-C-a bbspinkのみの広告ファイル 四
0144◆cZfSunOs.U
垢版 |
2005/11/21(月) 01:34:39ID:+sSOM0E80
考えてみると,性質の異なるデータを1つの DB に混在させてしまうより,
別々の DB に分けた方が検索効率もアップしますし,>>139 のチラシの裏のような
用途への応用も考えると,複数の DB を作成できるようにした方が汎用性は高そうですね.
ということで「板名」以外に「DB名」という引数も設け,1つの板で複数の DB を
持てるようにするのもいいかも知れませんね.
0145root▲ ★
垢版 |
NGNG
>>143-144
> この API 用の DB はオンメモリで完結ということでもいいのでしょうか

こういう仕様だといいかもです。

1) bbsdが終了する時に、HDDに吐き出して終了する
場所・場所は public_html/test/bbsdのDBとわかるもの.cgi あたりで
2) bbsdは起動時にそのDBがあるか調べて、あれば読み込んでスタート
あとはオンメモリで動作

> Samba24 と ● のデータを1つの DB に混在させる形でもいいのでしょうか,

これは >>144 のご指摘のとおり、DB名を指定できるとすばらしいです。
今後何か装置を開発した時に、DB名を変えていろいろとDBを増やせそうなので。

ということで、>>136 はこんな汎用APIになりますか。

(続く)
0146root▲ ★
垢版 |
NGNG
(続き)

a+b) Samba24用汎用API、●でスレッド立て過ぎにも使用

書き込みリクエストがあると呼ばれる。
引数: DB, bname, ID, s, w, k

DB: 文字列(例: samba24)
bname: 板名
ID: IPアドレスまたは携帯固有番号またはp2の番号または●セッションID
(任意の文字列として取り扱えればOK)
s: 秒数 (s > 0)
w: 注意回数 (w >= 0)
k: 規制回数 (k >= w >= 0)

処理内容:

今まで1回もそのIDで問い合わせを受けたことがなければ、
DBで指定されたDBに「ID、1回、その時間」を登録して、正常終了を呼び出し元に返す。

そのIDで問い合わせを受けたことがある場合は、

もし、前に問い合わせを受けてからs秒以上経過していた場合には、
指定されたDBのそのIDのエントリをリセット(*2)して、正常終了を呼び出し元に返す
(*2)「ID、1回、その時間」にする。
0147root▲ ★
垢版 |
NGNG
>>143
あとは広告関係ですか。

ぼちぼち仕様出していきますが、このへんは実際に動かしながらでもいいかなと。
0148root▲ ★
垢版 |
NGNG
で、先回りして言っておくと、広告には「取り扱い的に」種類が大きく二つあるです。

a) 所定のファイルを読み込んでいる広告
b) bbs.cgiにハードコーディングで埋め込まれている報告

a) は、bbsdで無理なく対応可能ですが、
b) を、さてどうするかと。

というわけでこのへんは、動かしながら調整かなぁと。
0149root▲ ★
垢版 |
NGNG
ということで、今日はこのへんで二度寝するです。

なんか寝床からムニャーとしながら京ぽんでアクセスしたら、
何か漏れてたみたいで、PC出してごそごそと。
0150root▲ ★
垢版 |
2005/11/21(月) 16:22:49ID:???0
で、bbs.cgiに埋め込まれている広告問題ですが、

a) このさいだから、bbs.cgiから切り出す
b) bbs.cgi から bbsd に何らかの方法で渡す

の2つが考えられるですね。

でかいのは a) にするとして、b) もある程度残りそうな予感も少し。
0151◆cZfSunOs.U
垢版 |
2005/11/21(月) 20:54:54ID:+sSOM0E80
>>145-150 乙です.では DB 用 API はそういう形で実装していきます.
これが完了すると,とりあえず bbsd 側では動かせる形になるってところですかね.
広告については,確かに大きく固まってる部分は切り出しも容易でしょうけど,
細かくちりばめられてる部分をどうするかってのは考えどころですね......
0152root▲ ★
垢版 |
2005/11/22(火) 01:56:57ID:???0
>>151
了解です。よろしくおねがいしますです。

で、それ(広告)をうまく切り出せるようにすることをめざして、
作業をすすめています。

しかし、

MakeWorkFile
MakeIndex4Keitai
MakeIndex4PC

いずれも、割と神の領域だったりするんだな、これが。
0153root▲ ★
垢版 |
2005/11/24(木) 17:54:43ID:???0
厳密にはスレ違いですが。

read.cgi と offlaw.cgi は、とりあえずmor_proxy経由でバックエンドで動かして、
mod_cache を通さないようにする、という、アドホックな路線でいってみようかと。

で、ひとつSunOSさんにというか、Apacheをわかっている方に質問なのですが、

<IfModule mod_cache.c>
CacheDisable /livejupiter/SETTING.TXT
CacheEnable disk /livejupiter/
CacheRoot /md/cache
CacheSize 65536
</IfModule>

なんて書いた場合、/md/cache のオーナーとかパーミッションって、
どうすればよかったんでしたっけか。

なんか、キャッシュされないみたいなんで。
0154 ◆TWARamEjuA
垢版 |
NGNG
LoadModule cache_module modules/mod_cache.so

が抜けているとか?
0155◆cZfSunOs.U
垢版 |
2005/11/24(木) 21:06:02ID:g6I3uHOe0
Samba24 用汎用 DB チェック&登録:
    my $statnum = bbsd($bbs, 'chkid', $dbname, $id, $seconds, $nwarn, $nkick, "$logfilename:$logline");

    ・ このような流れ:
      if ($id エントリ存在) {
        if ($id_entry->n == 規制発動)
          $statnum = 3;
        else if (現在時刻 - $id_entry->time >= $seconds) {
          $id_entry->n = 1;
          $statnum = 0;
        }
        else if (++$id_entry->n <= $nwarn)
          $statnum = 1;
        else if ($id_entry->n <= $nkick)
          $statnum = 2;
        else {
          $id_entry->n = 規制発動;
          $statnum = 3;
        }
      }
      else {
        $id エントリ作成;
        $id_entry->n = 1;
        $statnum = 0;
      }
      $id_entry->time = 現在時刻;
      return $statnum;

    ・ (現在時刻 - $id_entry->time >= 3600 秒) のエントリは削除.

    ・ データは $DOCUMENT_ROOT/$bbs/bbsd_dbs/$dbname にストア.
      次回起動時にそのファイルがあれば読み込んで利用.
      bbsd_dbs ディレクトリが存在しなければ自動的に作成し,
      その際 "Deny from all" という内容の .htaccess も自動作成.
      # これでファイル名を *.cgi にしたりダミーの index.html を作成したりも不要かと.

Samba24 用汎用 DB チェック:
    my $statnum = bbsd($bbs, 'peekid', $dbname, $id, $seconds, $nwarn, $nkick, "$logfilename:$logline");

    ・ エントリ登録・更新を行わないが,それ以外は chkid と同じ.

Samba24 用汎用 DB クリア:
    my $errmsg = bbsd($bbs, 'clearids', $dbname, "$logfilename:$logline");
Samba24 用汎用 DB エントリ数カウント:
    my $n = bbsd($bbs, 'countids', $dbname, "$logfilename:$logline");
0156◆cZfSunOs.U
垢版 |
2005/11/24(木) 21:06:47ID:g6I3uHOe0
スレスト:
    my $errmsg = bbsd($bbs, "stop:$key", $datline, "$logfilename:$logline");
スレ再開:
    my $errmsg = bbsd($bbs, "restart:$key", $datline, "$logfilename:$logline");

    $datline は dat に追記する内容(通常書き込み時と同フォーマット).

スレ移動:
    my $errmsg = bbsd($bbs, "move:$key", $newbbs, "$logfilename:$logline");
----------------------------------------------------------------------
以上実装しますた.別鯖へのスレ移動を除いて一通り実装できたかと思います.


>>153 乙です.
>/md/cache のオーナーとかパーミッション

httpd プロセスが読み書き可能なオーナ・パーミッションであれば Ok かと.

>なんか、キャッシュされないみたいなんで。

とりあえず "LogLevel debug" にしてみると手がかりが得られるかも知れません.

>read.cgi と offlaw.cgi は、とりあえずmor_proxy経由でバックエンドで動かして、
>mod_cache を通さないようにする、という、アドホックな路線でいってみようかと。

これやるなら,Last-Modified を吐くようにしてキャッシュを効かせる形の方が良さそうな気もしますけどね.
0157root▲ ★
垢版 |
2005/11/25(金) 00:13:21ID:???0
>>154
ううむ、入っていると思うけど、、、。

>>155
おつです。

これで、bbsdの準備は整った、ということ、、、なのかな。
read.cgi の改良は、第二段階ですね。

で、たぶん将来的には、read.cgi/offlaw.cgiはlive22じゃなくて、
live22xで動かすようにするほうがよさげかなと。
0158root▲ ★
垢版 |
2005/11/25(金) 00:13:41ID:???0
で、live22のbbsdを更新しました。
いっぽ、いっぽ。
0159root▲ ★
垢版 |
2005/11/25(金) 02:52:48ID:???0
bbs.cgi とにらめっこ中、、、。

単純な質問で申し訳ないのですが、
$logfilename:$logline は、その「行為」ごとにとられる、ということかしら。
つまり、ログとらなくてもいい場合は、どうすればいいのかなと。
0160root▲ ★
垢版 |
2005/11/25(金) 02:56:25ID:???0
こんなふうでいいのかな。

my $md5line = &bbsd($GB->{FORM}->{'bbs'}, 'getmd5seed', "/dev/null:");
0161root▲ ★
垢版 |
2005/11/25(金) 03:08:20ID:???0
$md5line = &bbsd($bbs, 'getmd5seed', "/dev/null:");

しこんだ。
0162root▲ ★
垢版 |
2005/11/25(金) 03:44:33ID:???0
とれるみたい。

%./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
0163root▲ ★
垢版 |
2005/11/25(金) 03:57:34ID:???0
%./bbs.pl livejupiter chkid kuromarusuretate AAAAAAAA 3600 6 6 /dev/null:test
0164root▲ ★
垢版 |
2005/11/25(金) 04:04:16ID:???0
./bbs.pl livejupiter getndats /dev/null:test
0
0166root▲ ★
垢版 |
NGNG
…ということで、仮組み込みまで終わったです。

今のところの問題は、>>162 の後半のやつですね。
なんでだろう。

でもまずは、順調と思います。
本日は、ここまでで。
0167◆cZfSunOs.U
垢版 |
2005/11/25(金) 06:49:32ID:M1pAccsZ0
>>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 は整数値です.
0168root▲ ★
垢版 |
NGNG
>>167
上: ありがとうです。うまくいきました。

下: おはずかしいです。修正して、ちゃんと動きました。
0169root▲ ★
垢版 |
NGNG
というわけで、ひとつ、仕様追加のお願いがあります。

>>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側に返していただきたいなと。
0170root▲ ★
垢版 |
NGNG
あと、もう一つI/Fがほしいです。

・板名とスレッドキーで指定してbbsdを呼ぶと、該当するdatの1行目をそのまま返す

これができると、トラックバックに対応できます。

さみだれ式ですみませんが、よろしくおながいしますです。
0171root▲ ★
垢版 |
NGNG
それから、、、広告か。

ここに晒していいかどうかわからないから、メールしておくです。
0175root▲ ★
垢版 |
NGNG
おしりの

アニメ | CM | ゲーム | 映画 | 音楽 | テレビ | 日記

は、bbs.cgi から教えることにしたです(対応済み)。
0176root▲ ★
垢版 |
NGNG
purge...

とか、なってしまうのですね。< footnote

ちと、微妙かも。
0177root▲ ★
垢版 |
NGNG
…あと、Over1000やらスレストやら何やらで、書き込みリクエストがしくった場合の
エラー処理ハンドリングって、どうやればいいのかしら、、、。
0179◆cZfSunOs.U
垢版 |
2005/11/25(金) 22:08:00ID:M1pAccsZ0
>>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) を
返しますので,それに沿って処理すればいいかと.
0180◆cZfSunOs.U
垢版 |
2005/11/25(金) 22:24:56ID:M1pAccsZ0
get1 (>>1取得)ですが,sub bbsd {} 中の
        recv(SOCK, $str, 2048, 0)
となってる部分の 2048 をもっと大きい数値にしないと,
>>1文が長い場合に尻切れになってしまうかも知れません.
0182◆cZfSunOs.U
垢版 |
2005/11/25(金) 23:11:38ID:M1pAccsZ0
bbsd 側の SO_SNDBUF も大きくした方がよさそうなので,その点も変更.
0183root▲ ★
垢版 |
NGNG
洋ぽん問題の対応を先にするです。

まずは、メールフォワードしておくです。
0184◆cZfSunOs.U
垢版 |
2005/11/26(土) 00:52:45ID:NBQj9pON0
>>183 メール受け取りました.で,広告の件ですが......
インクルードファイルの情報は非公開とのことなんですが,bbsd.c 自体が
今のところソース公開状態なんで,それを直接 bbsd.c に埋め込むと
結果的には公開してしまうことになってしまうんですよね......

ということで,いくつか方策を考えたんですが

1. bbsd.c も非公開化する.
2. 広告テキストだけでなく,インクルードファイル名も bbsd 呼び出し時の
  引数として渡すようにする.
3. index.html のテンプレートは bbsd.c にハードコーディングではなく,
  外部ファイル化してそれを利用する形にする.
4. その他何かいい方法.

さて,どういう形がいいでしょうか......
0185root▲ ★
垢版 |
NGNG
>>184
私は、広告の場所も公開して問題ないとは思うのですが、、、。

1. は、いやですね。
2. がいい気がします。

基本的に、広告は3ブロックなので、
'ad1'
'ad2'
'ad3'
みたいな引数で、DOCROOTからの相対パスで
広告のファイル名指定できるようにしておくというのはどうでしょう。

で、それをそのまま読んでいただければと。
0186root▲ ★
垢版 |
NGNG
>>185 は、

'ad1' は hoge.txt
'ad2' は test/munya.txt
'ad3' は munya.txt

みたいなかんじで、bbsdに教えておくということです。
0187◆cZfSunOs.U
垢版 |
2005/11/26(土) 01:15:14ID:NBQj9pON0
>>185-186 では,インクルードファイル名も引数化ってことですね.
ただ,bbsd に渡すパス名は,$logfilename も touch コマンドの引数も
$DOCUMENT_ROOT/test/ からの相対パスという形になってますので,
それに統一した方がいいと思います.これは,bbs.cgi 自体の場所からの
相対パスってことですね.
0188root▲ ★
垢版 |
NGNG
>>187
了解です。
それ(testから)に合わせていただいて、問題ないです。
0189root▲ ★
垢版 |
NGNG
Samba は、無事動いたです。

>>182
そっか、「UDPいっぱつもの」なんですよね。
大きくする(8192)ことは簡単ですが、何か副作用ありますかね。
0190root▲ ★
垢版 |
NGNG
あと、datを chmod 444 すると、
書けたように見えて書けないというのが、発生するみたいです。
0191◆cZfSunOs.U
垢版 |
2005/11/26(土) 02:31:37ID:NBQj9pON0
>>189 まぁ,バッファ用にその分メモリ食うぐらいかなと思います......

>>190 そのスレに手動で
bbs.pl livejupiter (key) 'a<>a<>a<>a<>' foot log
とか実行するとどうなりますか?
0192root▲ ★
垢版 |
NGNG
>>191
そのぐらいなら、たいしたことはなさそうですね。
8192にしておくか。

>>191
chmod 444 してから、ってことですかね。
0193◆cZfSunOs.U
垢版 |
2005/11/26(土) 02:41:05ID:NBQj9pON0
>>192
>8192にしておくか。

dat の1行そのまま返すので,本文の制限容量より多めの方がいいかも知れません.

>chmod 444 してから、ってことですかね。

そうです.
0194root▲ ★
垢版 |
NGNG
%./bbs.pl livejupiter 1132860497 'a<>a<>a<>a<>' foot log
Permission denied

ふうむ。ってことはbbs.cgi側すね。
すんませーん。でなおしてきます。
0195root▲ ★
垢版 |
NGNG
bbs.cgiの虫でした。
さっきのは、虫していただければと。カサコソ

--------------------
書込み中・・・
--------------------
ERROR!
ERROR:このスレッドには書き込めません。

ホストbanana637.maido3.com

名前: ◆MUMUMUhnYI
E-mail: sage
内容:
ほい。

こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。

アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。自分で解決してみよう! 書き込めない時の早見表
0196◆cZfSunOs.U
垢版 |
2005/11/26(土) 09:58:37ID:NBQj9pON0
広告対応しますた.書き込み API の引数追加になります.
# ずいぶん引数が多くなってきました(w

    my $errmsg = bbsd($bbs, $key, $datline, $footnote, $adfile1, $adfile2, $adfile3, $adline, "$logfilename:$logline");

$adline が一番下の小さいやつです.

ただ,現状では $adfile1 には外枠が含まれておらず(つまり bbsd 側で枠を作成),
一方 $adfile2, $adfile3 には外枠が含まれ(つまり bbsd 側では枠を作成せず),
そのため今のままでは枠の外観が不統一になってしまいますね.
0197 ◆TWARamEjuA
垢版 |
NGNG
>>196
> # ずいぶん引数が多くなってきました(w
リファレンスで渡すといぃかも?
my $errmsg = bbsd(
 [
  BBS => $bbs,
  KEY => $key,
  DATLINE => $datline,
  :
  :
 ]
);
みたいな。。。
0198◆cZfSunOs.U
垢版 |
2005/11/26(土) 11:03:31ID:NBQj9pON0
>>197 単純に引数を羅列するよりリファレンスで渡す方が
無駄なコピーとかは発生しないようになるんですかね.
ただ,sub bbsd {} 自体はあまりインテリジェントではなく,
単純に引数を連結して bbsd にパケット投げてるだけなんで,
ハッシュリスト形式にするメリットはあまりないかも......
0199iv66.opt2.point.ne.jp(222.225.56.66) stream ◆PNstream2s
垢版 |
2005/11/26(土) 12:35:38ID:z1nSq/XO0
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)
0201stream ◆PNstream2s
垢版 |
2005/11/26(土) 12:37:52ID:z1nSq/XO0
うーん、IFをつめてくスレだったからやっぱbbs.cgiスレのほうが良かったですね
0202root▲ ★
垢版 |
NGNG
調整途中でした。>>199-201

不具合報告は、別のところがよかったすね。
スレはないので、、、。bbs.cgi スレにお願いです。
0203root▲ ★
垢版 |
NGNG
で、ちょっと対応します。

そうか、新スレの時はスレッドキーが返るのを忘れてた。
0204 ◆TWARamEjuA
垢版 |
NGNG
>>198
おそらく効率的では「ない」かと(苦笑)@リファレンス私→デリファレンスして連結して
でも、可読性や引数の抜けによる思わぬ鰓を減らすのには十分威力があるんじゃないかなぁと♪
0205◆cZfSunOs.U
垢版 |
2005/11/26(土) 13:50:47ID:NBQj9pON0
>204 ふむふむ......確かに可読性はよくなりそうですね.特に >>196 ぐらいになると
単純な引数羅列では混乱しそうで(w ただ,bbsd 側でも単純な引数羅列ならデリミタで
ちょん切るだけなのに対し,key-value ペアだともうちょっと働かないといけなくなりそう
というのもあるんで......引数の過不足には現状でも "Invalid argument" を返すんで(ex.>>162),
とりあえず例えばコメントで引数について注釈付けておくとかしておいてもらえば

  my $errmsg = bbsd(
    $bbs, # 板名
    $key, # スレッドキー
    $datline, # dat への追記内容
    :
    :
  );

何とかなるかなぁという気もしたりしなかったり......
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況