雪だるま作戦において開発をすすめている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に持たせたい・持つべきな機能をあぶり出し、実装仕様を詰めていくことを目標にしています。
探検
【雪だるま】bbsd⇔各cgi間のI/F仕様について考え・詰めていくスレッド
■ このスレッドは過去ログ倉庫に格納されています
1root▲ ★
NGNG83root▲ ★
NGNG これで、bbsd で「スレッド立てすぎです」のためのFIFOを一元管理し、
各フロントエンドの bbs.cgi からスレ立て時に問い合わせることになります。
まだきちんと読んでいませんが、timecount/timeclose のところも
基本的にはこれまたはこれのバリアントで、いけるような気がしています。
各フロントエンドの bbs.cgi からスレ立て時に問い合わせることになります。
まだきちんと読んでいませんが、timecount/timeclose のところも
基本的にはこれまたはこれのバリアントで、いけるような気がしています。
84root▲ ★
NGNG …さて、とりあえず今日はこのぐらいで。
85root▲ ★
NGNG ただ、バリアントとはいえ、微妙なことはいくつかしているようです。
たぶん、FIFOとはいえ、[1-10] は [1-9] ほど簡単な構造ではないですね。
いずれにせよ、以降は明日以降とゆうことで。
たぶん、FIFOとはいえ、[1-10] は [1-9] ほど簡単な構造ではないですね。
いずれにせよ、以降は明日以降とゆうことで。
86root▲ ★
NGNG で、基本路線を書いておこうと。
基本的には、
dat直読みやsubject.txtはApacheの機能で、
すべてのフロントエンドで共有しなければいけないデータで、
かつすばやい同期・反映・浸透が求められるものは bbsd で一元管理し、
すべてのフロントエンドで共有しなければいけないデータで、
バックエンドからゆっくり同期すればいいもの(例: SETTING.TXT やキャップデータ)は、
rsync とかでゆくーり配る
別のマスターから配布しているもの(Rock54のデータとか)は、基本的に今までどおり
といったかんじで。
基本的には、
dat直読みやsubject.txtはApacheの機能で、
すべてのフロントエンドで共有しなければいけないデータで、
かつすばやい同期・反映・浸透が求められるものは bbsd で一元管理し、
すべてのフロントエンドで共有しなければいけないデータで、
バックエンドからゆっくり同期すればいいもの(例: SETTING.TXT やキャップデータ)は、
rsync とかでゆくーり配る
別のマスターから配布しているもの(Rock54のデータとか)は、基本的に今までどおり
といったかんじで。
87root▲ ★
NGNG 【スレ立て規制】 mesh だけ規制強化する?
http://qb5.2ch.net/test/read.cgi/operate/1086942520/
http://qb5.2ch.net/operate/kako/1086/10869/1086942520.html
を、教えてもらいました。< スレ立て規制
http://qb5.2ch.net/test/read.cgi/operate/1086942520/
http://qb5.2ch.net/operate/kako/1086/10869/1086942520.html
を、教えてもらいました。< スレ立て規制
88▲ ◆cZfSunOs.U
2005/11/01(火) 23:44:09ID:WRnidKIn0 >>73-87 乙です.ぼちぼちやっていきます.
ところで,各データについてリブートをまたいで保持する必要があるか否か
ということについてはどうなりますでしょうか.リブートをまたいだ保持が
不要なデータについては,ファイルに記録せずオンメモリで完結させてしまった方が
簡単かも知れませんので......
ところで,各データについてリブートをまたいで保持する必要があるか否か
ということについてはどうなりますでしょうか.リブートをまたいだ保持が
不要なデータについては,ファイルに記録せずオンメモリで完結させてしまった方が
簡単かも知れませんので......
90root▲ ★
NGNG うぉ、暴発。
IDの種やスレッド立て抑制のためのデータは、さすがに揮発するとまずいです。
IDが変わってしまったり、リブート後にスレッド立ちまくりになったりしてしまうんで、、、。
明日以降ぼちぼちやっていこうと思っている、timecount/timecloseとかは、
場合によってはオンメモリだけでもいいかもしんないです。
これは私もまだ読みきってないんで、別途考慮ってかんじですか。
IDの種やスレッド立て抑制のためのデータは、さすがに揮発するとまずいです。
IDが変わってしまったり、リブート後にスレッド立ちまくりになったりしてしまうんで、、、。
明日以降ぼちぼちやっていこうと思っている、timecount/timecloseとかは、
場合によってはオンメモリだけでもいいかもしんないです。
これは私もまだ読みきってないんで、別途考慮ってかんじですか。
92root▲ ★
NGNG [1-12] 1-B-c ●でスレッド立てすぎです、またにしてくださいの作業用ファイルとフォルダ 一
[1-13] 1-B-d Samba24の作業用ファイルとフォルダ 一
これやろうかと。
[1-13] 1-B-d Samba24の作業用ファイルとフォルダ 一
これやろうかと。
93▲ ◆cZfSunOs.U
2005/11/05(土) 21:55:21ID:JPA5x/Zh0 [1-2] 1-A-b IDを作るための種ファイル 一 (>>73-77):
my $md5seed = bbsd($bbs, 'getmd5seed', "$logfilename:$logline");
・ $DOCUMENT_ROOT/$bbs/md5.cgi がなければ作成("yyyy_mm_dd<>16bytes-seed"),あればそれを読み込む.
・ yyyy_mm_dd を現在の日付と比較し,同じならそのまま返し,違っていたら作り直した上で返す.
[1-9] 1-A-c スレッド立てすぎです、のための記録用ファイル 一 (>>81-82):
my $value = bbsd($bbs, 'chkthr', $file, $n, $key, $value, "$logfilename:$logline");
・ $DOCUMENT_ROOT/$bbs/$file があればそれを読み込む.
・ $key というキーを持つデータが存在すれば,それと対になって記録されていた $value を戻り値として返す.
FIFO データは変更せず.(FIFO の順番だけでなく $value も更新しないということでいいんですよね?)
・ $key というキーを持つデータが存在しなければ,それを FIFO の末尾に追加する.
FIFO 段数が $n より多ければ余剰分を先頭から順に削除.
更新結果をファイルに書き出す.空文字列を戻り値として返す.
----------------------------------------------------------------------
ここまで実装しますた.
で,念のため [1-9] の $value の最大サイズがどの程度になるか教えておいて下さい.
あと,[1-10], [1-12], [1-13] の記録データの最大サイズも同様におながいします.
my $md5seed = bbsd($bbs, 'getmd5seed', "$logfilename:$logline");
・ $DOCUMENT_ROOT/$bbs/md5.cgi がなければ作成("yyyy_mm_dd<>16bytes-seed"),あればそれを読み込む.
・ yyyy_mm_dd を現在の日付と比較し,同じならそのまま返し,違っていたら作り直した上で返す.
[1-9] 1-A-c スレッド立てすぎです、のための記録用ファイル 一 (>>81-82):
my $value = bbsd($bbs, 'chkthr', $file, $n, $key, $value, "$logfilename:$logline");
・ $DOCUMENT_ROOT/$bbs/$file があればそれを読み込む.
・ $key というキーを持つデータが存在すれば,それと対になって記録されていた $value を戻り値として返す.
FIFO データは変更せず.(FIFO の順番だけでなく $value も更新しないということでいいんですよね?)
・ $key というキーを持つデータが存在しなければ,それを FIFO の末尾に追加する.
FIFO 段数が $n より多ければ余剰分を先頭から順に削除.
更新結果をファイルに書き出す.空文字列を戻り値として返す.
----------------------------------------------------------------------
ここまで実装しますた.
で,念のため [1-9] の $value の最大サイズがどの程度になるか教えておいて下さい.
あと,[1-10], [1-12], [1-13] の記録データの最大サイズも同様におながいします.
94root▲ ★
2005/11/05(土) 23:21:16ID:???0 >>93
おつです。おつです。
> (FIFO の順番だけでなく $value も更新しないということでいいんですよね?)
よいです。
> で,念のため [1-9] の $value の最大サイズがどの程度になるか教えておいて下さい.
ホストネームの最大長 + α ぐらいでよいと思います。
安全をみて、512 Bytes とかでよいかと。
> あと,[1-10], [1-12], [1-13] の記録データの最大サイズも同様におながいします.
了解です。
仕様指定時に改めて指定させていただきますです。
おつです。おつです。
> (FIFO の順番だけでなく $value も更新しないということでいいんですよね?)
よいです。
> で,念のため [1-9] の $value の最大サイズがどの程度になるか教えておいて下さい.
ホストネームの最大長 + α ぐらいでよいと思います。
安全をみて、512 Bytes とかでよいかと。
> あと,[1-10], [1-12], [1-13] の記録データの最大サイズも同様におながいします.
了解です。
仕様指定時に改めて指定させていただきますです。
2005/11/06(日) 20:25:11ID:oVNuRozN0
2005/11/06(日) 22:58:29ID:yvSWRg1b0
>>96
live22x1〜live22x3とlive22はntpで時間合わせしてる前提なので
それほどサーバ間で時間に差があることはないので、レアケースですが、
例えば、以下の状況だと、live22x1だけ一日前の種を使うことにならない?
live22x1:
日付が変わったので bbsd を呼ぶ (2005年11月07日00:00:00)
live22:
まだ日付が変わっていない (2005年11月06日23:59:59)
他の対策としては、bbsd側の種の更新タイミングを、bbs.cgiより1分ほど
早く設定すれば回避出来なくはないかな。
live22x1〜live22x3とlive22はntpで時間合わせしてる前提なので
それほどサーバ間で時間に差があることはないので、レアケースですが、
例えば、以下の状況だと、live22x1だけ一日前の種を使うことにならない?
live22x1:
日付が変わったので bbsd を呼ぶ (2005年11月07日00:00:00)
live22:
まだ日付が変わっていない (2005年11月06日23:59:59)
他の対策としては、bbsd側の種の更新タイミングを、bbs.cgiより1分ほど
早く設定すれば回避出来なくはないかな。
98root▲ ★
NGNG >>97
なるほど、
だとすると、
> ・bbsdは「その板の今日のIDの種はこれだよ」と、16バイトのバイナリをbbs.cgiに返す
の時に、bbsdからbbs.cgiに日付と種を両方返すことにして、
bbsdから戻ってきた日付が万一bbs.cgiの意図したものじゃなかったら、
その結果は捨てることにすればいいのかな。
なるほど、
だとすると、
> ・bbsdは「その板の今日のIDの種はこれだよ」と、16バイトのバイナリをbbs.cgiに返す
の時に、bbsdからbbs.cgiに日付と種を両方返すことにして、
bbsdから戻ってきた日付が万一bbs.cgiの意図したものじゃなかったら、
その結果は捨てることにすればいいのかな。
9996
2005/11/06(日) 23:39:26ID:sDcfiRZ20 >>98
いい感じですね
bsd.cgi は返って来たものが意図したものと違ってたら捨てて、
何回かリトライさせればOKだと思う
ところで、bsd.cgi は絶対に種は必要なのかな。
bbsd が保持してるだけじゃ駄目?
; H"の回線が切れたので、ID変わってます
いい感じですね
bsd.cgi は返って来たものが意図したものと違ってたら捨てて、
何回かリトライさせればOKだと思う
ところで、bsd.cgi は絶対に種は必要なのかな。
bbsd が保持してるだけじゃ駄目?
; H"の回線が切れたので、ID変わってます
2005/11/06(日) 23:41:33ID:sDcfiRZ20
101▲ ◆cZfSunOs.U
2005/11/06(日) 23:44:42ID:iq8V25O30 bbsd が返すのは現状でも "yyyy_mm_dd<>16bytes-seed" になってますね.
# というか,最初の仕様は 16bytes-seed の部分だけ返すという意図だったんですか......
# というか,最初の仕様は 16bytes-seed の部分だけ返すという意図だったんですか......
102root▲ ★
NGNG >>99-101
了解です。
該当部分は、
if(open(MD5FILE, "<$md5datefile"))
{
my $md5line = <MD5FILE>;
close(MD5FILE);
my ($a, $b) = split(/<>/, $md5line, 2);
if ($a eq $md5date) {return $b;}
}
return &foxCreateMD5id($bbs,$md5date) ;
という感じなので、現状の仕様でよいと思います。
# 私の仕様指定があいまいだったわけですが、ちゃんと意図どおりになっていてよかたです。
了解です。
該当部分は、
if(open(MD5FILE, "<$md5datefile"))
{
my $md5line = <MD5FILE>;
close(MD5FILE);
my ($a, $b) = split(/<>/, $md5line, 2);
if ($a eq $md5date) {return $b;}
}
return &foxCreateMD5id($bbs,$md5date) ;
という感じなので、現状の仕様でよいと思います。
# 私の仕様指定があいまいだったわけですが、ちゃんと意図どおりになっていてよかたです。
103root▲ ★
NGNG >>99
> ところで、bsd.cgi は絶対に種は必要なのかな。
> bbsd が保持してるだけじゃ駄目?
そういう仕様(毎回bbsdに伺う)でも悪くはないですが、
IDの種は1日に1回しか変わらないので(通常運用では1日に1回だけリフレッシュすればよい)、
キャッシュさせたほうがいいのかなと。
で、IDをbbsd側でつけるというのも、なんか微妙にセンス悪いとゆうか、
bbs.cgi側の都合で変えたくなった時に、微妙にフレキシブルじゃないとゆうか。
> ところで、bsd.cgi は絶対に種は必要なのかな。
> bbsd が保持してるだけじゃ駄目?
そういう仕様(毎回bbsdに伺う)でも悪くはないですが、
IDの種は1日に1回しか変わらないので(通常運用では1日に1回だけリフレッシュすればよい)、
キャッシュさせたほうがいいのかなと。
で、IDをbbsd側でつけるというのも、なんか微妙にセンス悪いとゆうか、
bbs.cgi側の都合で変えたくなった時に、微妙にフレキシブルじゃないとゆうか。
2005/11/07(月) 22:43:28ID:KqEOS0ue0
>>104
そういう意味ではなく、種が必要な処理は全てbbsdに任せて、bbs.cgiは
種を使った処理をしないという選択もありでは?
種を使う処理が仮に書き込み時だけだとすると、書き込み時に bbsd が
変換すればOKなので。
と、各々の細かい役割を知らないのに勝手なこと言ってすいません。
そういう意味ではなく、種が必要な処理は全てbbsdに任せて、bbs.cgiは
種を使った処理をしないという選択もありでは?
種を使う処理が仮に書き込み時だけだとすると、書き込み時に bbsd が
変換すればOKなので。
と、各々の細かい役割を知らないのに勝手なこと言ってすいません。
>>105
個人的にbbs.cgiは内容には一切触れずに規制処理(DNS系統:省Rock54+BBR)だけ行えば?なぁんて妄想もしていたりします。
単一bbsdでは負担が掛かるようなら子供を産んでも良さそうな。とかとか。。。
個人的にbbs.cgiは内容には一切触れずに規制処理(DNS系統:省Rock54+BBR)だけ行えば?なぁんて妄想もしていたりします。
単一bbsdでは負担が掛かるようなら子供を産んでも良さそうな。とかとか。。。
107105
2005/11/07(月) 23:36:28ID:qaYfXUl/0 同じこと言ってましたね。
ちゃんと読んでませんでした、申し訳ない。
bbsdとのI/Fは変えずに、単純に、bbs.cgi を frontend/backend に役割を分けて
しまう手もありますね。
ちゃんと読んでませんでした、申し訳ない。
bbsdとのI/Fは変えずに、単純に、bbs.cgi を frontend/backend に役割を分けて
しまう手もありますね。
108root▲ ★
2005/11/08(火) 02:05:40ID:???0 >>105
書きこみ時に bbsd で共通部分の処理をするというセンスは、
次の段階としては、ありなのかな。
ただ、基本的にファイルI/Oと共通データベース処理に専念してほしい予感も。
そもそも、bbsd.cgiのバックエンド的な位置づけなわけだし。
書きこみ時に bbsd で共通部分の処理をするというセンスは、
次の段階としては、ありなのかな。
ただ、基本的にファイルI/Oと共通データベース処理に専念してほしい予感も。
そもそも、bbsd.cgiのバックエンド的な位置づけなわけだし。
109root▲ ★
2005/11/08(火) 16:31:58ID:???0 bbsdって1000超えした時って、どういう処理をするんでしたっけ。
1) このスレッドは1000を超えました。 <br> \
もう書けないので、新しいスレッドを立ててくださいです。。。
を書くかどうか
2) 板名/1000.txt を読むかどうか
1) このスレッドは1000を超えました。 <br> \
もう書けないので、新しいスレッドを立ててくださいです。。。
を書くかどうか
2) 板名/1000.txt を読むかどうか
110▲ ◆cZfSunOs.U
2005/11/08(火) 21:32:03ID:+RowFQSH0 >>109 1000.txt が存在すればそれを用い,なければ 1) の内容で dat に書き込みます.
2005/11/09(水) 21:26:46ID:4LkEBQVF0
【Project peko】2ch特化型サーバ構築作戦 Part6
http://qb3.2ch.net/test/read.cgi/operate/1076413123/652-
懐かしいところ、日々成長だわな
http://qb3.2ch.net/test/read.cgi/operate/1076413123/652-
懐かしいところ、日々成長だわな
113動け動けウゴウゴ2ちゃんねる
2005/11/11(金) 14:27:16ID:lQB+cJ3w0 久しぶりに来たが、ぜんぜん進展してないの?
つうか、まとめサイトは?
テンプレすら張ってないし。
つうか、まとめサイトは?
テンプレすら張ってないし。
2005/11/11(金) 14:27:47ID:lQB+cJ3w0
すんません誤爆しました。
115root▲ ★
2005/11/11(金) 14:54:00ID:???0 >>113
もうすこしかな。
Check_HardPosting (連続投稿ですか?) のところの
しくみの洗い出しと理解を、先にやりたいです。
それができると、雪だるまのためのbbs.cgi洗い出しは、
概ねできたことになるはず。
もうすこしかな。
Check_HardPosting (連続投稿ですか?) のところの
しくみの洗い出しと理解を、先にやりたいです。
それができると、雪だるまのためのbbs.cgi洗い出しは、
概ねできたことになるはず。
116root▲ ★
NGNG timecount/timeclose の処理も、FIFOですね。
ここに書こうと。
ここに書こうと。
117root▲ ★
NGNG 簡単にいうと、こんなかんじ。
1) timecount分のFIFOを準備しておく
2) 投稿に固有のID(*1)をキーに、FIFOを探す
3) FIFO内にそのIDがtimeclose個以上あったら「連続投稿ですか? (見つかった回数)回」エラー
4) IDをFIFOに積む、古いものからところてん式に押し出されていく
(*1)IPアドレスまたは携帯固有番号またはp2の番号
これなら、先だって用意していただいたものと同じようなのを
もひとつ準備していただければ、できそうですね。
1) timecount分のFIFOを準備しておく
2) 投稿に固有のID(*1)をキーに、FIFOを探す
3) FIFO内にそのIDがtimeclose個以上あったら「連続投稿ですか? (見つかった回数)回」エラー
4) IDをFIFOに積む、古いものからところてん式に押し出されていく
(*1)IPアドレスまたは携帯固有番号またはp2の番号
これなら、先だって用意していただいたものと同じようなのを
もひとつ準備していただければ、できそうですね。
118root▲ ★
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的にはメモリ上のみでよいと考えます。
についてです。
ということで、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的にはメモリ上のみでよいと考えます。
119root▲ ★
NGNG あとは、>>92 ですか。
これらは基本的には、データベースですね。
ID、時間の要素、回数の要素
というDBをbbsd側で作っていただき、フロントからはそれに登録したり、
参照したりするかんじになるかなと。
詳細は、読みきったところで。
これらは基本的には、データベースですね。
ID、時間の要素、回数の要素
というDBをbbsd側で作っていただき、フロントからはそれに登録したり、
参照したりするかんじになるかなと。
詳細は、読みきったところで。
120▲ ◆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 から取得するのがいいのか,
どうなんでしょうね.微妙なところかも知れませんが......
ところでふと思ったんですが,timecount / timeclose データの FIFO の段数は
SETTING.TXT の timecount 値ということですが,となるとスレッド立てすぎデータ (>>93)
の FIFO 段数 $n も,ひょっとするとやはり SETTING.TXT の BBS_THREAD_TATESUGI 値
だったりするのでしょうか? もしそうだとすると......当初仕様通り bbsd 呼び出し時の
引数として $n を渡すのがいいのか,それとも bbsd 側で SETTING.TXT から取得するのがいいのか,
どうなんでしょうね.微妙なところかも知れませんが......
122root▲ ★
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 を読んで、それを使う
ことにしていただければと思います。
ご指摘のとおり、段数は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 を読んで、それを使う
ことにしていただければと思います。
124▲ ◆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 値を使用するよう変更.
----------------------------------------------------------------------
ここまで実装しますた.
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 値を使用するよう変更.
----------------------------------------------------------------------
ここまで実装しますた.
126root▲ ★
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になるとのこと。
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になるとのこと。
127root▲ ★
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回、その時間」を登録して、正常終了を呼び出し元に返す
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回、その時間」を登録して、正常終了を呼び出し元に返す
128root▲ ★
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」を呼び出し元に返す
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」を呼び出し元に返す
129root▲ ★
NGNG c) Samba24用DBリセット用API
F22から呼ばれる。
これを呼ぶと、そのbbsdで管理しているSamba24用DBの中身は全部ゼロクリアされる
ただし、a) で初期化した値はそのまま残る
d) Samba24用DB状況調査用API
F22から呼ばれる。
これを呼ぶと、いくつのIDがSamba24用DBに登録されているかを返す
F22から呼ばれる。
これを呼ぶと、そのbbsdで管理しているSamba24用DBの中身は全部ゼロクリアされる
ただし、a) で初期化した値はそのまま残る
d) Samba24用DB状況調査用API
F22から呼ばれる。
これを呼ぶと、いくつのIDがSamba24用DBに登録されているかを返す
130root▲ ★
NGNG …というかんじです。日本語が、微妙かもしれないですね。
変なところがあったら、書いてくださいです。> SunOSさん
日本語で説明を書き下すと、以外に複雑な形になってしまいましたが、
実際の中身は、それほどのものでもないです。
ようは、同じIDで短い時間の間に何度も何度もやると、だんだんと出世していって、
そのうち永久になっちゃいますよ、っていうかんじです。
それを、コスト低く実現していると。
今日は、こんなところで。
変なところがあったら、書いてくださいです。> SunOSさん
日本語で説明を書き下すと、以外に複雑な形になってしまいましたが、
実際の中身は、それほどのものでもないです。
ようは、同じIDで短い時間の間に何度も何度もやると、だんだんと出世していって、
そのうち永久になっちゃいますよ、っていうかんじです。
それを、コスト低く実現していると。
今日は、こんなところで。
131root▲ ★
NGNG …と、ここまで書いて、
s秒をbbsdで管理するか、bbs.cgiで管理するか、
微妙なかんじもしてきました。
つまり、bbsdでは「回数」「前の問い合わせからの経過秒数」を戻りにして、
Sambaの判定は、bbs.cgiでやらせたほうがいいんじゃないかなと。
その路線だと、、、。ちょっと、再度考えてみるですかね。
s秒をbbsdで管理するか、bbs.cgiで管理するか、
微妙なかんじもしてきました。
つまり、bbsdでは「回数」「前の問い合わせからの経過秒数」を戻りにして、
Sambaの判定は、bbs.cgiでやらせたほうがいいんじゃないかなと。
その路線だと、、、。ちょっと、再度考えてみるですかね。
133▲ ◆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 は登録のみ行うということも考えられますが,その場合
規定秒数以上だった場合のリセットが行えないのが問題ですかね.
問題は設定値(規定秒数・注意回数・規制回数)の扱いというところですか.
># 将来秒数sはSETTING.TXTになるとのこと。
というのを雪だるまを機に実施して,そうした設定値をすべて
SETTING.TXT から取得できるようにするのも一案かも知れませんが,
それができなければどうするかというところで......
「a) Samba24用DB初期化用API」と「b) Samba24用DB登録&チェック用API」
を別々にした場合,>>126 でも言及されているように a) より b) が
先に来るという可能性もあるのですが,それなら両者を統合して
「b) Samba24用DB登録&チェック用API」の引数でそれらの設定値も
一緒に渡すというのも一案かも知れませんね.いずれにせよ
秒数や回数の判定は登録&チェックの段階で行うことになりますし.
あるいは >>131 のように設定値に基づく判定は bbs.cgi 側が行って
bbsd は登録のみ行うということも考えられますが,その場合
規定秒数以上だった場合のリセットが行えないのが問題ですかね.
134▲ ◆cZfSunOs.U
2005/11/20(日) 10:01:50ID:EFjCcJ0V0 あと,規定秒数以上経過していたエントリは消していかないと,DB がどんどん肥大化
していきそうな気もしますね(その対策として c) があるのだと思いますが,
その呼び出しが来る前の段階で肥大化を防げればその方が良さそうな気もします).
ということで,やはり規定秒数は何らかの形で bbsd が知っておいた方がいいかも知れません.
していきそうな気もしますね(その対策として c) があるのだと思いますが,
その呼び出しが来る前の段階で肥大化を防げればその方が良さそうな気もします).
ということで,やはり規定秒数は何らかの形で bbsd が知っておいた方がいいかも知れません.
135root▲ ★
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できる仕組みを実装していただけると、
いいようなかんじで。
ちょっと、これらの路線で改めて仕様考えてみるです。
どもです。
> 問題は設定値(規定秒数・注意回数・規制回数)の扱いというところですか.
そういうことですね。
なんか「ステートレス」「ステートフル」っていう話か。
> 「a) Samba24用DB初期化用API」と「b) Samba24用DB登録&チェック用API」
> を別々にした場合,>>126 でも言及されているように a) より b) が
> 先に来るという可能性もあるのですが,それなら両者を統合して
> 「b) Samba24用DB登録&チェック用API」の引数でそれらの設定値も
> 一緒に渡すというのも一案かも知れませんね.いずれにせよ
> 秒数や回数の判定は登録&チェックの段階で行うことになりますし.
これ、いいかもですね。
毎回bbsdに引数を全部渡せばいいのか。
>>134
そですね。DBのレコード毎にexpireできる仕組みを実装していただけると、
いいようなかんじで。
ちょっと、これらの路線で改めて仕様考えてみるです。
136root▲ ★
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回、その時間」にする。
(続く)
書き込みリクエストがあると呼ばれる。
引数: 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回、その時間」にする。
(続く)
137root▲ ★
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」を呼び出し元に返す。
もし、前に問い合わせを受けてから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」を呼び出し元に返す。
138root▲ ★
2005/11/20(日) 22:16:23ID:???0 (続き)
あ、「ID、規制発動」になおしてください。< 4)
「ID、規制発動」の状態になってから3600秒(1時間)経過したら、
あるいは最後の問い合わせから3600秒経過したら、
そのIDのエントリをDBからexpireする。
あ、「ID、規制発動」になおしてください。< 4)
「ID、規制発動」の状態になってから3600秒(1時間)経過したら、
あるいは最後の問い合わせから3600秒経過したら、
そのIDのエントリをDBからexpireする。
139root▲ ★
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は準備いただけると。
で、●でスレッド立てすぎです、にも、応用できるですね。
bname: 板名
ID: ●のID
s: 3600
w: 6
k: 6
とかやれば、1時間で6つまでしか同じ●でスレッド、立てられないはず。
<チラシの裏>
うまくやれば、●を使ったスレつぶしにも対応できそうな気がしますが、
それは同じIDでDBを複数持たせる必要があるのかな。
あと、このI/Fを利用して、他サーバのbbs.cgiからex14のbbsdに通信して、
news4vipに関するデータを参照するとか(以下略。
</チラシの裏>
で、これをすればF22での定期クリアは必要なさそうな気もしますが、
メンテナンス用に、以下のI/Fは準備いただけると。
141root▲ ★
2005/11/20(日) 22:25:14ID:???0 で、あと、
これまで出た中で、詰めなければいけない仕様って、あったっけか。
これまで出た中で、詰めなければいけない仕様って、あったっけか。
142root▲ ★
2005/11/20(日) 22:28:18ID:???0 …で、私のほうでも、
bbs.cgi 見直してみるです。
この目的のために、かなり整理整頓したわけで。
bbs.cgi 見直してみるです。
この目的のために、かなり整理整頓したわけで。
143▲ ◆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のみの広告ファイル 四
オンメモリで完結ということでもいいのでしょうか,ということと,
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のみの広告ファイル 四
144▲ ◆cZfSunOs.U
2005/11/21(月) 01:34:39ID:+sSOM0E80 考えてみると,性質の異なるデータを1つの DB に混在させてしまうより,
別々の DB に分けた方が検索効率もアップしますし,>>139 のチラシの裏のような
用途への応用も考えると,複数の DB を作成できるようにした方が汎用性は高そうですね.
ということで「板名」以外に「DB名」という引数も設け,1つの板で複数の DB を
持てるようにするのもいいかも知れませんね.
別々の DB に分けた方が検索効率もアップしますし,>>139 のチラシの裏のような
用途への応用も考えると,複数の DB を作成できるようにした方が汎用性は高そうですね.
ということで「板名」以外に「DB名」という引数も設け,1つの板で複数の DB を
持てるようにするのもいいかも知れませんね.
145root▲ ★
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になりますか。
(続く)
> この API 用の DB はオンメモリで完結ということでもいいのでしょうか
こういう仕様だといいかもです。
1) bbsdが終了する時に、HDDに吐き出して終了する
場所・場所は public_html/test/bbsdのDBとわかるもの.cgi あたりで
2) bbsdは起動時にそのDBがあるか調べて、あれば読み込んでスタート
あとはオンメモリで動作
> Samba24 と ● のデータを1つの DB に混在させる形でもいいのでしょうか,
これは >>144 のご指摘のとおり、DB名を指定できるとすばらしいです。
今後何か装置を開発した時に、DB名を変えていろいろとDBを増やせそうなので。
ということで、>>136 はこんな汎用APIになりますか。
(続く)
146root▲ ★
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回、その時間」にする。
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回、その時間」にする。
148root▲ ★
NGNG で、先回りして言っておくと、広告には「取り扱い的に」種類が大きく二つあるです。
a) 所定のファイルを読み込んでいる広告
b) bbs.cgiにハードコーディングで埋め込まれている報告
a) は、bbsdで無理なく対応可能ですが、
b) を、さてどうするかと。
というわけでこのへんは、動かしながら調整かなぁと。
a) 所定のファイルを読み込んでいる広告
b) bbs.cgiにハードコーディングで埋め込まれている報告
a) は、bbsdで無理なく対応可能ですが、
b) を、さてどうするかと。
というわけでこのへんは、動かしながら調整かなぁと。
149root▲ ★
NGNG ということで、今日はこのへんで二度寝するです。
なんか寝床からムニャーとしながら京ぽんでアクセスしたら、
何か漏れてたみたいで、PC出してごそごそと。
なんか寝床からムニャーとしながら京ぽんでアクセスしたら、
何か漏れてたみたいで、PC出してごそごそと。
150root▲ ★
2005/11/21(月) 16:22:49ID:???0 で、bbs.cgiに埋め込まれている広告問題ですが、
a) このさいだから、bbs.cgiから切り出す
b) bbs.cgi から bbsd に何らかの方法で渡す
の2つが考えられるですね。
でかいのは a) にするとして、b) もある程度残りそうな予感も少し。
a) このさいだから、bbs.cgiから切り出す
b) bbs.cgi から bbsd に何らかの方法で渡す
の2つが考えられるですね。
でかいのは a) にするとして、b) もある程度残りそうな予感も少し。
151▲ ◆cZfSunOs.U
2005/11/21(月) 20:54:54ID:+sSOM0E80 >>145-150 乙です.では DB 用 API はそういう形で実装していきます.
これが完了すると,とりあえず bbsd 側では動かせる形になるってところですかね.
広告については,確かに大きく固まってる部分は切り出しも容易でしょうけど,
細かくちりばめられてる部分をどうするかってのは考えどころですね......
これが完了すると,とりあえず bbsd 側では動かせる形になるってところですかね.
広告については,確かに大きく固まってる部分は切り出しも容易でしょうけど,
細かくちりばめられてる部分をどうするかってのは考えどころですね......
152root▲ ★
2005/11/22(火) 01:56:57ID:???0 >>151
了解です。よろしくおねがいしますです。
で、それ(広告)をうまく切り出せるようにすることをめざして、
作業をすすめています。
しかし、
MakeWorkFile
MakeIndex4Keitai
MakeIndex4PC
いずれも、割と神の領域だったりするんだな、これが。
了解です。よろしくおねがいしますです。
で、それ(広告)をうまく切り出せるようにすることをめざして、
作業をすすめています。
しかし、
MakeWorkFile
MakeIndex4Keitai
MakeIndex4PC
いずれも、割と神の領域だったりするんだな、これが。
153root▲ ★
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 のオーナーとかパーミッションって、
どうすればよかったんでしたっけか。
なんか、キャッシュされないみたいなんで。
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 のオーナーとかパーミッションって、
どうすればよかったんでしたっけか。
なんか、キャッシュされないみたいなんで。
155▲ ◆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");
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");
156▲ ◆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 を吐くようにしてキャッシュを効かせる形の方が良さそうな気もしますけどね.
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 を吐くようにしてキャッシュを効かせる形の方が良さそうな気もしますけどね.
157root▲ ★
2005/11/25(金) 00:13:21ID:???0158root▲ ★
2005/11/25(金) 00:13:41ID:???0 で、live22のbbsdを更新しました。
いっぽ、いっぽ。
いっぽ、いっぽ。
159root▲ ★
2005/11/25(金) 02:52:48ID:???0 bbs.cgi とにらめっこ中、、、。
単純な質問で申し訳ないのですが、
$logfilename:$logline は、その「行為」ごとにとられる、ということかしら。
つまり、ログとらなくてもいい場合は、どうすればいいのかなと。
単純な質問で申し訳ないのですが、
$logfilename:$logline は、その「行為」ごとにとられる、ということかしら。
つまり、ログとらなくてもいい場合は、どうすればいいのかなと。
160root▲ ★
2005/11/25(金) 02:56:25ID:???0 こんなふうでいいのかな。
my $md5line = &bbsd($GB->{FORM}->{'bbs'}, 'getmd5seed', "/dev/null:");
my $md5line = &bbsd($GB->{FORM}->{'bbs'}, 'getmd5seed', "/dev/null:");
161root▲ ★
2005/11/25(金) 03:08:20ID:???0 $md5line = &bbsd($bbs, 'getmd5seed', "/dev/null:");
しこんだ。
しこんだ。
162root▲ ★
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
%./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
163root▲ ★
2005/11/25(金) 03:57:34ID:???0 %./bbs.pl livejupiter chkid kuromarusuretate AAAAAAAA 3600 6 6 /dev/null:test
164root▲ ★
2005/11/25(金) 04:04:16ID:???0 ./bbs.pl livejupiter getndats /dev/null:test
0
0
167▲ ◆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 は整数値です.
>$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 は整数値です.
169root▲ ★
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側に返していただきたいなと。
>>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側に返していただきたいなと。
170root▲ ★
NGNG あと、もう一つI/Fがほしいです。
・板名とスレッドキーで指定してbbsdを呼ぶと、該当するdatの1行目をそのまま返す
これができると、トラックバックに対応できます。
さみだれ式ですみませんが、よろしくおながいしますです。
・板名とスレッドキーで指定してbbsdを呼ぶと、該当するdatの1行目をそのまま返す
これができると、トラックバックに対応できます。
さみだれ式ですみませんが、よろしくおながいしますです。
171root▲ ★
NGNG それから、、、広告か。
ここに晒していいかどうかわからないから、メールしておくです。
ここに晒していいかどうかわからないから、メールしておくです。
173root▲ ★
NGNG175root▲ ★
NGNG おしりの
アニメ | CM | ゲーム | 映画 | 音楽 | テレビ | 日記
は、bbs.cgi から教えることにしたです(対応済み)。
アニメ | CM | ゲーム | 映画 | 音楽 | テレビ | 日記
は、bbs.cgi から教えることにしたです(対応済み)。
176root▲ ★
NGNG purge...
とか、なってしまうのですね。< footnote
ちと、微妙かも。
とか、なってしまうのですね。< footnote
ちと、微妙かも。
177root▲ ★
NGNG …あと、Over1000やらスレストやら何やらで、書き込みリクエストがしくった場合の
エラー処理ハンドリングって、どうやればいいのかしら、、、。
エラー処理ハンドリングって、どうやればいいのかしら、、、。
2005/11/25(金) 17:29:36ID:i7XT2rQk0
★★ 頑張って!rootさん! ★★
179▲ ◆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) を
返しますので,それに沿って処理すればいいかと.
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) を
返しますので,それに沿って処理すればいいかと.
180▲ ◆cZfSunOs.U
2005/11/25(金) 22:24:56ID:M1pAccsZ0181む@食事中 P211018235238.ppp.prin.ne.jp
2005/11/25(金) 22:52:19ID:u8Lne6GM0 おー、帰ったら早速組み込むです。
で、すぐメール出しなおします。
で、すぐメール出しなおします。
182▲ ◆cZfSunOs.U
2005/11/25(金) 23:11:38ID:M1pAccsZ0 bbsd 側の SO_SNDBUF も大きくした方がよさそうなので,その点も変更.
183root▲ ★
NGNG 洋ぽん問題の対応を先にするです。
まずは、メールフォワードしておくです。
まずは、メールフォワードしておくです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【MLB】 ドジャース 4-1 カブス [3/18] ドジャース開幕戦勝利 山本5回1失点、大谷マルチH カブス今永4回無失点も… [鉄チーズ烏★]
- 【自民党】「10万円商品券」配布問題で石破首相の窮地に勢いづく高市早苗“一派”「この苦境をガラッと変えられるのは彼女だけだ」 ★2 [樽悶★]
- 「日本人はマナーが悪くなったのか?」メジャー開幕戦での“レーザーポインター”による妨害に批判殺到 [王子★]
- GACKT 金を貸す際の流儀告白「貸すよりくれてやれ。ボクはそうしてる。それが出来ないならするな」「たとえ、親友でも親でも夫婦でも」 [muffin★]
- 【れいわ】山本代表「自民党だけ?うらやましいぞ」「みんなに配れ10万円♪」「消費税とっとと下げろ」「米よこせ」「野菜が高いぞ♪」 [樽悶★]
- イスラエル、ガザ空爆再開 200人死亡 「ハマスが停戦案拒否」★2 [香味焙煎★]
- 旧安倍派「石破降ろし」フルスロットルのワケ…恨み骨髄!引き金は森友文書の開示決定だった😲 [861717324]
- 【悲報】vチューバーさん、一斉に「vチューバーにはなるな!」といいだす [804382496]
- 本日3月19日9時半から、国会でアサクリシャドウズ問題を審議!!3月20日発売予定だが緊急発売中止に追い込むぞ!!石破茂に届け!! [485187932]
- 【日本人の民度】JA全農「備蓄米と表記したら、買う人が取り合いになり、消費者や流通が混乱するからしない」と、説明 [219241683]
- なんGなのらい部🏡
- ここ1年くらい、頭皮に湿疹ができてるんだが…