人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

何が原因ですかね?


●質問者: ironbsd
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Perl サーバ バッファリング バージョン ブラウザ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● thrillseeker
●35ポイント

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

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

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

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

そうです。


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

◎質問者からの返答

なるほど


2 ● tombe
●35ポイント

原因として考えられるのは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%...

◎質問者からの返答

むふむふ

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ