実装済:
subject.txt, subback.html, dat/*.dat 更新
あぼーん
dat/*.dat から subject.txt, subback.html 再生成
未実装:
index.html, html/*.html 更新
他板へのスレ移動 etc...
とりあえず↑ってところですが
http://sunos.saita.ma/bbsd.c 全部実装すると雪だるま対応仕様になりますが,とりあえず今の段階でも
subject.txt 更新等の重い処理を bbs.cgi から抜き出して軽量化にはなると思います.
使用法: bbsd [-cfh] [-b bindaddr] [-d docroot] [-i subjects_interval] [-I setting_interval] [-n nthreads] [-p port] [-s servername]
-b bindaddr: UDP ソケットを bind するアドレスを指定 [default: 127.0.0.1]
-c: 入力のバイトシーケンスチェックを行う (環境変数 LANG/LC_CTYPE/LC_ALL に依存)
-d docroot: httpd の document root [default: /usr/local/apache2/htdocs]
-f: フォアグラウンドで実行
-h: ヘルプ表示
-i subjects_interval: subject.txt 等の更新間隔(秒) [default: 5]
-I setting_interval: SETTING.TXT のチェック間隔(秒) [default: 60]
-p port: UDP ソケットのポート番号 [default: 2222]
-s servername: httpd のサーバ名 [default: www.example.com]
-DUSE_THREADS 付きでビルドするとマルチスレッド版になり,このオプションが追加.
-n nthreads: worker スレッド数 [default: 4]
んで,例えばこんな感じで起動する,と.
su ch2qb5 -c 'LANG=ja_JP.SJIS bbsd -c -d/home/ch2qb5/htdocs -sqb5.2ch.net'
bbs.cgi からの呼び出し法は
----------------------------------------------------------------------
use Socket;
use constant BBSD_HOST => inet_aton('127.0.0.1');
use constant BBSD_PORT => 2222;
use constant BBSD_TIMEOUT => 1;
sub bbsd {
my ($rfd, $str) = ('', '');
my $sin = sockaddr_in(BBSD_PORT, BBSD_HOST);
socket(SOCK, AF_INET, SOCK_DGRAM, 0) || return "$!";
send(SOCK, join('/', @_), 0, $sin) || return "$!";
vec($rfd, fileno(SOCK), 1) = 1;
if (select($rfd, undef, undef, BBSD_TIMEOUT)) {
recv(SOCK, $str, 256, 0) || return "$!";
}
else {
$str = "書き込みを受理しましたがサーバが混雑しています.書き込みが反映されない場合もあります.";
}
return $str;
}
----------------------------------------------------------------------