サーバープッシュについて

[上に] [前に] [次に]
アーサー 2000/02/17(木) 17:37:53
サーバープッシュを使用して
サーバーの状態遷移を検知してクライアントに
通知する(表示を切り替える)処理を行いたいのですが
どうもうまく行きません。
以下のロジックを実行すると
xxx.htmのファイルの中身(html)がそのままテキストで出力されて
しまい、<html>以下のタグが全く認識されません。

どなたか対処法を教えていただけませんか?


$| = 1;
$boundary = "----- END -----";
print "HTTP/1.0 200 OK\n";
print "Content-type: multipart/x-mixed-replace;";
print "boundary=$boundary\n";
print "\n";
print "$boundary\n";
print "\n";
$site = "0";
while (1) {
    unless (print "") {
        last;
    }
    open(IN, "current.dat");
    while(<IN>)
    {
        $current = $_;
    }
    close(IN);
    if ($site ne $current) {
        print "$boundary\n";
        print "\n";
        if ($current eq "1") {
             open(FILEA, "menu_1.htm");
             while(<FILEA>) {
                 print;
             }
             close(FILEA);
         } elsif ($current eq "2") {
             open(FILEB, "menu_2.htm");
             while(<FILEB>) {
                 print;
             }
             close(FILEB);
         } else {
             open(FILEC, "menu_3.htm");
             while(<FILEC>) {
                 print;
             }
             close(FILE3);
         }
         print "$boundary\n";
         print "\n";
         $site = $current;
     }
     sleep(5);
}

気まぐれ 2000/02/18(金) 01:14:50
>xxx.htmのファイルの中身(html)がそのままテキストで出力されて
>しまい、<html>以下のタグが全く認識されません。
多分そうだと思う(^^ゞ
だって、各ループの中に出力したものに mimeタイプ指定が無いもの・・・

IEでわざと表示させて、どういう順番でどの様なデータを出力してるかを
サンプルと比べてみましょう。

アーサー 2000/02/21(月) 16:43:42
たびたびすいません。
上記ソースのif〜elsif〜elseの直前に
print "Content-type: text/html\n";
print "\n";
を挿入してみたのですが、これもそのまま
文字列で出力されてしまうんですが
対応が間違えているのですか?

気まぐれ 2000/02/21(月) 23:47:09
ブラウザは何ですか?
サーバープッシュはネットスケープしか有効でないのは知ってますよね。

ここの(とほほの)サンプルを参考にしているようですが。
そのサンプルでは、ちゃんと動きますか?

アーサー 2000/02/22(火) 16:06:06
[[解決]]
もう一度とほほさんのサンプルをよく見直したら
できました。本当にすいません。
原因は...。
1. ヘッダ部の改行が\n → \r\nに変更
2. print "$boundary\n";
    print "\n";
    の後ろの改行は不要。
という事でした。
ありがとうございました!

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