freebsd7 + apache2 + perl を利用しています。


ブラウザでリアルタイムに出力させるための
$|=1;(バッファリングのOFF)
がうまくいきません。

結局いっぺんに出力されます。

仕方ないのでコンソールで実行したりしています。

バージョン違いのサーバなどでは上手くいくこともあるのですが
(バージョンの問題とは思えませんが)

何が原因ですかね?

回答の条件
  • 1人2回まで
  • 登録:2008/07/28 07:10:02
  • 終了:2008/08/04 07:15:02

回答(2件)

id:thrillseeker No.1

thrillseeker回答回数328ベストアンサー獲得回数372008/07/28 20:37:25

ポイント35pt

$|=1; として apache からブラウザにはリアルタイムで

データが流れても、ブラウザ側でバッファリングして

しまう事が原因です。従って、ブラウザの種類やバージョン、

キャッシュの ON/OFF などによって結果は大きく変わり

そうです。


http://d.hatena.ne.jp/pinkgear/20061228/1167357789

id:ironbsd

なるほど

2008/07/30 01:06:51
id:tombe No.2

tombe回答回数38ベストアンサー獲得回数72008/07/28 21:37:19

ポイント35pt

原因として考えられるのはapacheしかありません。

perlで標準出力へのバッファリングをoffにしたとしても、それをパイプ経由で仲介しているapacheがバッファリングしていれば効果が出ません。ブラウザと直接通信しているのはapacheだからです。

また、リアルタイム表示を確実に実現させる為にはバッファリングoffだけでは不十分で、本来ならHTTPプロトコルレベルで制御できる「サーバープッシュ」という技法を使うべきです。

ただし、サーバープッシュはかつてNetscapeが独自仕様として実装していた歴史がありますが、あまり普及しなかった経緯があります。


CGI::Push(Netscape流サーバープッシュをサポートするモジュール。対応ブラウザは限定される)

http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Push.pod


最近ではcometという技法もあるそうですが、Ajax的な姑息通信みたいです。

http://www.google.co.jp/search?hl=ja&q=%E3%82%B5%E3%83%BC%E3%83%...

id:ironbsd

むふむふ

2008/07/30 01:18:55

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません