とほほカウンターでsleepを使用しないでロックするには?

[上に] [前に] [次に]
ナナ 1999/11/25(木) 23:22:02
いつも勉強させていただいています。

とほほさんのカウンターを使わせていただこうと思っているのですが、
契約しているプロバイダの「アーバンインターネット(Urban
Internet)」から、sleep()関数は使用できないと、チェックが
入りました。

---------------------------------------------

3. 203 行目  sleep(1);

  Webサーバの負荷を抑える為、弊社では sleep() 関数の
使用を見合わせております。
  行頭に "#" を追加してコメントアウトする等の処置を
お願いいたします。


   なお、 上記内容はその動作を保証するものではありません。
   ご了承願います。

---------------------------------------------

sleepとflockで検索をしてみたのですが、該当する質問を
見つけられませんでしたので、皆さんのお知恵をお借りしたいと思い、
質問いたします。
プロバイダの言うように、上記の方法でsleepを使用不可にしても
問題ないのでしょうか? それとも、sleepを使用しないで
ロック権を得る方法を探したほうがよいのでしょうか?
まだ勉強を始めたばかりの初心者なので、右も左も全く分からず
右往左往しています。どうか、よろしくお願いします。

ふじ 1999/11/25(木) 23:37:16
sleep の替わりに4引数の select が使えますが

select(undef, undef, undef, 1);

ただし、動作としては sleep と同じなので
> Webサーバの負荷を抑える為
という意味では同じ(おそらく許可されない)ですね。

>上記の方法でsleepを使用不可にしても問題ないのでしょうか?
上記の sleep 文は、ロックされていたら一秒待ってもう一度試す、
という動作をしています。
sleep をコメントアウトしてしまうと、ロックされていた場合に
かなりの確率でロック失敗する(カウンタがアップしない、表示されない)
事になります。
#アクセスがそれほど多くない環境ならあまり問題ない気もしますが


flock が使える環境なら、それを使ってロック部分を書き直す、
という手があります。
http://www.tohoho-web.com/wwwperl2.htm#flock
ここなどを参考に・・・

ナナ 1999/11/27(土) 15:11:48
ふじさんありがとうございました。
早速プロバイダに確認したところ、やっぱりselectは駄目でした。
でも、flockは使えるそうなので、そっちを試してみたいと思います。
これだと、mkdirは使用しないのでlockディレクトリは削除しても
いいのでしょうか?

ナナ 1999/11/28(日) 00:34:26
過去のflockを検索してみた結果、../199909/99090342.htm
の山本晋也さんのソース(解決時)を使用させていただく
ことにしました。
ロックファイル等の書き換えが、間違ってないか確認を
お願いします。

-----------------------------------
とほほカウンター設置方法CGI
サーバー上に/cgi-bin/lock/を置くを
/cgi-bin/wwwcount.locに修正

wwwcount.cgi
111行目
$file_lock   = "lock/$count_name" . ".loc";

$file_lock   = "$count_name" . ".loc";
に修正

129行目
if (-d $file_lock) {

if (-r $file_lock) {
に修正

188行目
#ロック権を得るの内容を削除。
open(LOCK, "$file_lock");
flock(LOCK, 2);
を置く

367行目
#ロック権を解放するの内容を削除。
close(LOCK);
を置く。

-----------------------------------
山本さんのソースにあった「ログの読み込み」と「書き込み」は
元々のプログラムをそのまま使用します。

初めてCGIを設置する私なんかが直したものが、本当に正しい処理
を行えるのか、かなり不安です。どうかよろしくご指導お願いします。あと、元のロックプログラムでは前のロックファイルが残っている時は
何度か再トライを行うようになってましたが、今の形だと再トライは
行わないんですよね? その場合、HPを見に来た人にはカウンターの
数字が表示されない・・・となるのでしょうか? 

ナナ 1999/12/08(水) 00:07:14
[[解決]]
・・・あきらめました。
プロバイダの指示通り、sleepをコメントアウトします。
今までお世話になりました。

[上に] [前に] [次に]