bbs.cgi再開発プロジェクト5

このエントリーをはてなブックマークに追加
356FOX ★
>>335
Socket を使うときはどんなクラス(←Perlでもこの言い方でいいの?)を使うんですか?
Net::Socket とかなんとか便利なものがあるんですか?
Net::Http とか? (←勝手に想像しています)
357ひろゆき@どうやら管理人 ★:04/12/30 00:22:23 ID:???
beに登録してるユーザーの場合は、beのDBに見に行くようにしてみようかと。
358ひろゆき@どうやら管理人 ★:04/12/30 00:23:03 ID:???
>>356
use socket;
だけで、あとはこそこそと。
359FOX ★:04/12/30 00:27:23 ID:???
投稿毎にやるですか、、、
360root▲ ★:04/12/30 00:27:37 ID:???
>>325
単純な暴走が起こります。
そのプロセス(perl subbbs.cgi)が、プロセスを100%使ってしまう。
で、120秒分CPUを使うと、むなしく終了していく。

スレ立ての時に直接subbbs.cgiをコールする2ちゃんねるビューワもあるような
気がちょっとしたけど、どうでしたっけ。

>>326
そのコードでたぶん問題ないと思います。
私も、>>329 の変化に注目したい。

>>357
beのDBが落ちていた場合に、どうなるのかしら。
待っちゃう?
361root▲ ★:04/12/30 00:29:41 ID:???
全投稿に対してやるとすると、相当気合入れないと大変すよ。サーバ側。
FreeBSD素の設定(各種カーネルチューンしてない状態)では、
ほとんどむりぽなような。

確か今160万投稿とか170万投稿とかあるので、
そのつもりでサーバ側をまじめに強化しないと、かなりきびしいです。
362FOX ★:04/12/30 00:29:47 ID:???
>>360
subbbs.cgi をバックアップして
今は使われていませんとしてみよう。
363root▲ ★:04/12/30 00:35:14 ID:???
そうか、BBSとBBYのDBに、2ちゃんねるのサーバ全部を登録するようにしなきゃ。
やってきます。
364FOX ★:04/12/30 00:41:51 ID:???
うっ 上書きしつまった、
subbbs.cgi は何処か遠くへ・・・

でもどっかのサーバに残っているだろう、きっと。
365動け動けウゴウゴ2ちゃんねる:04/12/30 00:48:48 ID:mjkYzHbf
Have a nice surf !!

Top
366root▲ ★:04/12/30 00:48:55 ID:???
2ちゃんねるの全bananaサーバからの登録を受け付けるようにした。
カウントアップ復活を確認。

http://stats.2ch.net/suzume.cgi
367root▲ ★:04/12/30 00:49:28 ID:???
368未承諾酩酊※ ◆TWARamEjuA :04/12/30 00:49:38 ID:+U2vszG5
369 ◆Reffi/bQ.c :04/12/30 00:51:11 ID:QWSoREWe
あわわわ
とりあえず、ミャンマー当たりで連投スレ建てしまくって不具合無いか調べた
ほうがいい鴨
370未承諾酩酊※ ◆TWARamEjuA :04/12/30 00:52:09 ID:+U2vszG5
>>356
ごくごく簡単にURLから何かを拾ってきたいのならばLWP::UserAgentなんてモジュールがあるですよ。
http://search.cpan.org/~gaas/libwww-perl-5.803/lib/LWP/UserAgent.pm
371FOX ★:04/12/30 01:16:05 ID:???
bubble2サーバから回収してきた < subbbs.cgi
subbbs-save.cgi で qb6に入れた。
372FOX ★:04/12/30 01:17:55 ID:???
>>370
あっ それ知ってる、
boo80 はそれでやったような、
373FOX ★:04/12/30 01:24:37 ID:???
$ua = LWP::UserAgent->new() でUA作って
HTTP::Headers->new()
HTTP::Request->new() なんてのを作って
UA にheadrer と Request くべて
$res = $ua->request() すねーるんですよね?

$ua->timeout(15) とか設定して

タイムアウト時は$response->code() あたりを見ればいいのかしら?

374FOX ★:04/12/30 01:30:04 ID:???
しかし本筋は
●の時にやったように期限付きのセッションID方式と思われ < be のDB look up
375root▲ ★:04/12/30 01:33:21 ID:???
DBが何でできているかわかりませんが、
前にDBIがどうのとかどっかで言っていたような気がするので、
MySQLか何かのサーバと、プロセス間通信しようとしているのかも。
376ひろゆき@どうやら管理人 ★:04/12/30 02:23:43 ID:???
>>359
beにログインしてるユーザーの場合だけです。
377未承諾酩酊※ ◆TWARamEjuA :04/12/30 02:32:45 ID:+U2vszG5
>>373
そんな感じですー

→タイムアウト時は$response->code() あたりを見ればいいのかしら?
例文の通り、
 $response->status_line;
とすると詳しい情報が得られるようです。('time out' の文字列が含まれています。)
378ひろゆき@どうやら管理人 ★:04/12/30 02:41:02 ID:???
$ip = inet_aton($be_host) || print "host($be_host) not found.\n";

$sockaddr = pack_sockaddr_in($port, $ip);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) || print "socket error\n";

connect(SOCKET, $sockaddr) || die "connect $be_host error\n";
autoflush SOCKET (1);

print SOCKET "GET $url HTTP/1.1\n";
print SOCKET "Host: $host\n";
print SOCKET "Connection: close\n\n";
379未承諾酩酊※ ◆TWARamEjuA :04/12/30 02:41:05 ID:+U2vszG5
>>377
ちなみに、
$response->status_line のとき。
 500 Can't connect to count.2ch.net:80 (connect: timeout) at ./test.pl line 12.

$response->code() のとき。
 500 at ./te.pl line 12.

となるですー
380ひろゆき@どうやら管理人 ★:04/12/30 02:42:08 ID:???
モジュールのほうが重そうな気がしたので、
書いたほうが早いと思ったんですが、どうなんでしょう?
381名無しさん:04/12/30 02:43:20 ID:PtWy/RYB
外部からbeのデータが覗かれちゃう危険は無いのかしらん、
382FOX ★:04/12/30 02:44:34 ID:???
モジュール(って言うんですか?)と同じに書けば同スピード
遅くなるように書けば遅いし
より早いコードを書けば早いかと、

ちなみにコンパイルされるんで
ロードの負荷やコンパイルの負荷は限りなく0です。
383ひろゆき@どうやら管理人 ★:04/12/30 02:45:12 ID:???
>>381
DBIだとselect文とかいじれちゃうので、
http経由のほうがいいかなぁと思ったのです。
384ひろゆき@どうやら管理人 ★:04/12/30 02:46:14 ID:???
>>378みたいに7行で終わるので、
モジュールよりは、早いんじゃないかなぁ、、と。
385FOX ★:04/12/30 02:46:53 ID:???
サーバの場所に実は一番左右されたり < コードの優劣より
386未承諾酩酊※ ◆TWARamEjuA :04/12/30 02:47:25 ID:+U2vszG5
>>378
timeout処理がないので、count.2ch.net みたいになると永遠に戻らなくなるですよー(汗)
でもってalarm()を使うと、SpeedyCGIではへんてこりんになるんだっけ?

>>380
リクエストされる数にもよるけれども、10分に1回くらいのリクエストならLWP::UserAgent使う方が楽かもですー
(このあたりはTimeoutをどれくらい取るかに左右されるかと思いますー)
387root▲ ★:04/12/30 02:49:28 ID:???
TCPセッション張るですか。
connect() で詰まったら(サーバが落ちてたとかで)、どうするんだろう。
388root▲ ★:04/12/30 02:51:13 ID:???
>>386
alerm() はSpeedyCGIでは使えませんです。
モジュール使って、タイムアウト指定しとかないとひどいことになるような。

LWP::UserAgent とかを使って、タイムアウトを入れたほうがよさげ。
389FOX ★:04/12/30 02:52:27 ID:???
正常にGETが終了する場合
 >>378 でも >>373 でも
  PIE 内であれば BD の処理を除けば 10ms 以下で終ると予想
  PIE 外(たとえば日本) 200ms かかるかも?

異常な場合(timeout.busy等)
>>378 timeout 処理ないと bbs.cgi が待ち続け他の人がかけなくなる (-M32)
>>373 timeout 処理をたんたんと、

ってとこかな?
390未承諾酩酊※ ◆TWARamEjuA :04/12/30 02:53:26 ID:+U2vszG5
>>388
LWPなどはIO:SelectでTimeout処理しているのでSpeedyCGIでもへんてこりんにならないようなのですー
391FOX ★:04/12/30 02:55:01 ID:???
あと、、
>>378 の場合はわからないけど
>>373 でやると簡単に HTTPS が使えたり、Proxy経由で参照できたりと
のちのち簡単です
392root▲ ★:04/12/30 02:55:39 ID:???
>>389
概ね、そんなかんじかと。

PIE <=. Sakuraは120msぐらいかかるみたいなので、250msぐらいはかかるですね。

%ping be.2ch.net
PING be.2ch.net (202.222.31.214): 56 data bytes
64 bytes from 202.222.31.214: icmp_seq=0 ttl=47 time=119.828 ms
64 bytes from 202.222.31.214: icmp_seq=1 ttl=47 time=123.794 ms
64 bytes from 202.222.31.214: icmp_seq=2 ttl=47 time=120.057 ms
64 bytes from 202.222.31.214: icmp_seq=3 ttl=47 time=122.132 ms
64 bytes from 202.222.31.214: icmp_seq=4 ttl=47 time=120.747 ms
^C
--- be.2ch.net ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 119.828/121.312/123.794/1.478 ms
393未承諾酩酊※ ◆TWARamEjuA :04/12/30 02:56:05 ID:+U2vszG5
>>389
おそらくビンゴー♪
>>391
ですです(嬉)
394root▲ ★:04/12/30 02:56:37 ID:???
>>390
…ですね。

ふろ入ってくるです。東京、さむさむ。
395FOX ★:04/12/30 02:57:29 ID:???
こっちは最高気温が-5℃とかだったり
雪祭りシーズン並
396root▲ ★:04/12/30 02:57:48 ID:???
>>392
あ、RTTだから単純に倍するのはへんだ、、、。
397動け動けウゴウゴ2ちゃんねる:04/12/30 02:59:53 ID:tK0pClhz
connect()失敗した後にファイルディスクリプタ解放してないのか・・・
まぁひとごとだし、いいけど。
398root▲ ★:04/12/30 03:01:28 ID:???
>>397
うむ。
SpeedyCGIだと、こういうのも響いてくる予感。

つまり、どなたかのいう「静脈系」をちゃんとできるひとじゃないと、
いじった場合、よりいっそういけないことになると。

ふろー。
399ひろゆき@どうやら管理人 ★:04/12/30 03:02:25 ID:???
素直にLWPつかいますかー。
400動け動けウゴウゴ2ちゃんねる:04/12/30 03:03:00 ID:fcdZGLxI
yamete
401400@FOX ★:04/12/30 03:03:49 ID:???
サンプルもって来る出巣
402FOX ★:04/12/30 03:08:32 ID:???
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Status;

my $ua = LWP::UserAgent->new();
$ua->agent ("Iyan Bakan ver 1.00");
$ua->from ("security\@2ch.net");
$ua->proxy("http", "http://$proxy/") ;#proxyさすなら
$ua->timeout(15);
$header = HTTP::Headers->new(
'Referer' => "http://www.2ch.net/",
);
my $parameter= "abc=123&def=456";
my $request = HTTP::Request->new("POST", "http://be.2ch.net/nantara.cgi", $header, $parameter);
my $response = $ua->request($request) ;#ここで GET 処理
#ここでtimeout処理
my $response_code = $response->code();#302とか404とか500
my $response_body = $response->content();#GETの結果はここに入っている
403FOX ★:04/12/30 03:11:09 ID:???
たぶん 7行より短くなるはず、