PHPとMySQLをつかったウェブアプリケーションの開発に関する情報を収集しています。
クライアントソフトが数分間に一回、サーバーへ情報を取りに行く方法ではなく、以下の方法ができたら負荷が少なくていいかなと考えています。このような手法は可能でしょうか。
・クライアントの発信元情報を、サーバー側のデータベースに記録しておく
・データベースが更新され、通知の必要が生じたら、先ほど記録されたクライアント情報の一覧を取得し、それらにデータを一斉送信
・待機中のクライアントがデータを受け取り、情報が表示される。
クライアント側はブラウザだけではなく、Win32アプリケーションなどAPIの選択肢が幅広いアプリケーションも使えるものとします。もし技術的に無理なようであれば、無難に定期的にデータを取得しに行く方法を採用したいと思います。
No.2ベストアンサー
- 回答日時:
クライアントから定期的に取りに行かないとすると、やり方としては大きく2通り。
1.普段はTCPセッションを張って無くて、必要が生じたときにサーバーからクライアントにTCPセッションを張って通知する。
⇒No1の方の回答の通り。イントラならあり得るでしょうね。ブラウザは不可。
2.常時TCPセッションを張っておいて、必要が生じたらサーバーからクライアントに通知する。
⇒WebSocketというキーワードで調べてみてください。HTML5の機能の一つなのでブラウザによってはサポートしている。まだこなれていない技術なのでドキュメントも少ないと思います。
http://ja.wikipedia.org/wiki/WebSocket
TCPセッションを常時張ったままなので、クライアントが多いとサーバーリソースが持たないかも
現状では、定期的にクライアントから取りに行くのがいいでしょうね。
No.3
- 回答日時:
HTTPはブラウザからのキックで通信が始めるのと、一往復で終わる、ステートレスな通信なので、
サーバーからのキックでセッションを開始するというのは、基本的には無理なんですが、
以前 AJAXタイプのチャットのプログラムを作った時に、以下の手法で
ポーリング回数を減らしたり、リアルタイムに表示できることを、実現したことがあります。
・ブラウザ側のjavascriptが、新規投稿がないかをサーバーに問い合わせしにいく。(投稿にIDを付けて、受け取れているIDを引き渡し)
・サーバ側では、新規投稿があればすぐにXMLでデータを返すが、
新規投稿がないときはゼロの返事をすぐに戻すのではなく、一旦保留する。
・ブラウザにとっては、見かけ上 サーバーの応答が遅いだけに見えるので、返事がくるのを待っている。
・サーバー側で 新規投稿があった時点で、すぐに保留を再開してブラウザにデータを返す。
(ブラウザ側では見かけ上、リアルタイムに新規投稿されたデータが表示されていく)
・HTTPのタイムアウト防止のため、新規投稿がなくてもある程度は、新規投稿ゼロを戻す。
・ブラウザ側では、データを受取って表示したら、すぐに次のリクエストを送る。
ご参考まで。
No.1
- 回答日時:
通知の必要が生じたときにphpスクリプトが起動される・・・ということですよね。
クライアント側は特定のポートで待ち受けていないといけませんから、ブラウザでは無理ですね。専用のWin32アプリを作成するにしても、Firewallで許可してもらう必要がありますし、ルータを使った環境であればポート開放が必要になります。
また、クライアントがその時点で待ち受けているかどうかの保証はありませんから(通信環境の都合でIPアドレスが変わっている可能性もある)相当に無駄が発生しそうです。
イントラ環境であれば、それなりに使えるような気はします。というか、それならそれでphpスクリプトでなくデータベースを更新したプロセスが通知すればいいように思います(Win32アプリ同士のやりとりで完結しそうな・・・)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 数百社を超えるクライアントから依頼が来る際、各社さまざまなフォーマット、形式、(情報が行で記載されて 2 2022/04/07 23:17
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- PHP バージョン情報の取得方法について 1 2023/03/15 11:56
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- ガラケー・PHS 携帯電話の居場所信号の発信タイミング 3 2022/07/27 14:39
- その他(法律) 携帯電話会社に保管されている解約済み個人情報を消去したい 3 2022/08/13 23:23
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(セキュリティ) eKYC(Povo、メルカリ、ヤフオクなど)に重大なリスクが含まれていませんか?大丈夫でしょうか? 2 2023/02/04 17:40
- HTML・CSS 別サイトのHTML内にある情報を自動取得して、自分のサイトに組込む方法を教えてください。 例えば、Y 1 2023/06/15 08:09
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP session_destroyとsession...
-
$_SESSION 有効期限をブラウザ...
-
セッション機能が使えない
-
session_start();について
-
DOCOMOのセッションについて
-
GETでの変数の受け渡しについて
-
フォントの色を変えるには?
-
PHPのif文でその処理を途中で抜...
-
リンク先を隠す方法はないでし...
-
copy() で属性保存
-
onedrive にexcelファイルをア...
-
「クラス関数」「メンバ関数」...
-
別PHPファイルに変数を渡す
-
VBSの「MsgBox」について
-
3つ以上の論理積は利用可能なの...
-
「@$変数」の「@の意味は?」
-
CFileDialogの最初のディレクト...
-
BASP21メール送信(SMTP-AUTH認...
-
htmlをphpにするにあたってデメ...
-
openCVの超解像処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP session_destroyとsession...
-
$_SESSION 有効期限をブラウザ...
-
jqueryの$.ajaxでPHPに値を渡し...
-
セッションファイルの場所
-
セッションのクッキー有効期間...
-
session_set_save_handler の実...
-
セッション部分のインクルード
-
リロード・ページビューの判定
-
phpのセッションについて
-
SESSIONを階層ごとに分けるには?
-
自動ログアウト
-
phpでのログアウトについて
-
「セッション管理用のクッキー...
-
PHPの引数を含んだURLについて
-
session_start();について
-
SESSION の受け渡し
-
PHPでのセッション管理について
-
セッションが変数が取得できません
-
session_start出来ません。
-
ログインしたページで、ある処...
おすすめ情報