こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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などでてはくるのですが、
使えません・・・
※私の技量・・・

投稿日時 - 2017-10-20 09:51:30

QNo.9387846

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>恐らくチャットを作りたいと言う事だと思います。
>恐らくAjaxが必要でしょうが(Perlも必要ですよ)、良く分からないので「Ajax入門」とかでググって下さい。

随分前からCometと言う概念?(手法?)も広まっているようです。
Cometはハードルが高そうなので、とりあえずAjaxから勉強した方が良いと思われます(Cometを使わなくてもチャットは作れるでしょう)。

CometとAjaxを利用したチャットサーバの実装
https://codezine.jp/article/detail/733

投稿日時 - 2017-10-25 17:57:32

ANo.2

>ユーザーAが書込。
>閲覧中のユーザーBのページがリアルタイムで更新

恐らくチャットを作りたいと言う事だと思います。
恐らくAjaxが必要でしょうが(Perlも必要ですよ)、良く分からないので「Ajax入門」とかでググって下さい。

例.
Ajax入門
https://www.ajaxtower.jp/ini/

投稿日時 - 2017-10-24 23:48:15

ANo.1

> 閲覧中のユーザー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は関係ないと思いますよ)

投稿日時 - 2017-10-20 13:54:45

あなたにオススメの質問