- 締切済み
Perl JavaScript リアルタイム更新
(1)サーバー側に置いてあるファイルの最終更新日時を取得 --> (2)へ 例)<--ここがPerlの処理? /test/log.txt --> 更新日時 2017/10/19 19:12 (2)-(1)ページに入った時間より新しければ、ページ更新 例)<--ここはJavaScriptの処理? /test/log.txt --> 更新日時 2017/10/19 20:25 (2)-(2)ファイルが更新されなければ、そのまま ユーザーA、ユーザーBが同時に掲示版を閲覧 ユーザーAが書込。 閲覧中のユーザーBのページがリアルタイムで更新 調べればWebSocketやSSLなどでてはくるのですが、 使えません・・・ ※私の技量・・・
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- amanojaku1
- ベストアンサー率54% (265/488)
>恐らくチャットを作りたいと言う事だと思います。 >恐らくAjaxが必要でしょうが(Perlも必要ですよ)、良く分からないので「Ajax入門」とかでググって下さい。 随分前からCometと言う概念?(手法?)も広まっているようです。 Cometはハードルが高そうなので、とりあえずAjaxから勉強した方が良いと思われます(Cometを使わなくてもチャットは作れるでしょう)。 CometとAjaxを利用したチャットサーバの実装 https://codezine.jp/article/detail/733
- amanojaku1
- ベストアンサー率54% (265/488)
>ユーザーAが書込。 >閲覧中のユーザーBのページがリアルタイムで更新 恐らくチャットを作りたいと言う事だと思います。 恐らくAjaxが必要でしょうが(Perlも必要ですよ)、良く分からないので「Ajax入門」とかでググって下さい。 例. Ajax入門 https://www.ajaxtower.jp/ini/
- superside0
- ベストアンサー率64% (461/711)
> 閲覧中のユーザーBのページがリアルタイムで更新 ユーザーが自分で”新着確認”のボタンを押すのではなく、だれかが新規投稿したら それを自動的に閲覧中の画面に反映させたいってことですね。 理屈はチャットと同じなので、チャットがどうやっているのかを調べるのがよいですよ。 ブラウザから他のブラウザに直接通信することはできませんし、 また、誰かが投稿したことはサーバーには分かりますが、 サーバー側からのきっかけで、Webブラウザ(クライアント)に対して通信することは できないので、ブラウザ側から新着がないかをポーリング(定期的に問い合わせ) するしかありません。 方法は2つで (1)閲覧中のHTMLを定期的(下記例では1分おき)にリロードするmetaタグを入れる <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="refresh" content="60"> 閲覧中のHTMLに投稿フォームもある場合は、記入中の文章が消えてしまうので この方式は使えませんが。 (2) Ajax 掲示板を閲覧しているHTML内に、新規の投稿がないかをサーバーに問い合わせする Ajax方式のJavaScriptを組み込んで、 サーバーから新規投稿が戻ってきたら、 それをJavaScriptでのDOM操作を使って表示中のHTMLに追加していく。 必要なのは、JavaScriptでのAjaxとDOM操作(jqueryでやると簡単)と そのAjaxの問い合わせに応答して新規投稿を返すサーバー側のスクリプト。 (perlでもいいし、PHPなどのJSON出力のライブラリを使ってもいいし) なお、 Ajaxで問い合わせするインターバルを短くすればすれほど、 他人の投稿がこちらに反映する時差を小さくできますが、 そのぶんサーバー負荷やリクエスト数が爆発的に増えてしまうので サーバー側でロングポーリングするアルゴリズム使うなど工夫が必要になります。 つまり、新着がないときにはすぐに応答せず、タイムアウトしない程度までは保留状態にしておいて 新着があってから応答するようにすると、新着を即座に返すことができますし、 サーバーの負荷やトラフィック量も軽減できます。 (なお、この件と、SSLは関係ないと思いますよ)