<環境>
サーバ側
OS:Linux
WEBサーバ:Apache
クライアント
OS:特に指定なし
WEBブラウザ:特に指定なし
サーバ側では、Apacheと別のアプリケーションBを起動させておきます。
(アプリケーションBは自分で作成したCのプログラムです。)
WEBページにアプリケーションBからの何らかのトリガーで、
変化を与えることが出来るでしょうか?
(例:scanfで文字入力を受け付けて、入力された文字をWEBブラウザ画面に表示させる等)
逆のパターンについては、以前、回答を頂いて実現出来たのですが、、、↓
>> [ブラウザ]-(http)->[Apache]-(STD I/O)->[CGI]-(ソケット通信)->[アプリケーションB]
逆の場合でも同じなのでしょうか?
そもそもCGIって、ブラウザからのアクションで動作しますよね?
だから、アプリケーションBの通知を待っている事は出来ない。。。
認識間違っていますか?
(CGI、初心者ですので、この辺の認識が危ういです。(CGIはPerlで実装する予定です。))
CGIの動作メカニズム?についての紹介されたページもあれば、
併せて教えて下さい。
以上、
よろしくお願いします。
Webページの表示・更新のトリガーは、クライアントサイドのブラウザからのリクエストです。
そのため、サーバサイドのアプリケーションBによって、クライアントのブラウザの表示を変更することはできません。
ご希望の動作の実現としては、
・Webページ内で、タイマーなどで定期的に変化を確認(リロード、または、Ajaxの利用)
・アプリケーションBは状況の変化をCGIがアクセス可能なデータとして格納(DB、ファイルなど)
・CGIは格納されたデータを元に出力する
という3つの動作を行わせることになります。
厳密に言うとできます。
Cometという技術を使うことで、プラウザ上でリアルタイムチャットとかは実現できます。
リアルタイムチャットっていうのは、サーバ上のデータが更新されたタイミングで接続しているプラウザの表示を変えるので質問の意図にそいます。
仕組みはAJAXのXMLHTTPRequestをサーバ上で保持して、任意のタイミングでレスポンスを返すことで実現するのですが、
かなり高等技術でJavaとかで実現するようです。
他にも同じような技術でLingerとかもあります。
Lingerでリアルタイムチャットを実現してるサイトです。
http://www.lingr.com/room/masuda
まあ、難しい技術なんでできないと思っても問題ありません。
やはり難しいですか。
アプリケーションBがメインのお仕事で、WEB表示部分には、
あまり時間かけてられないので、手軽な方法ないかなと思っていたのですが。
「WEBページにアプリケーションBからの何らかのトリガーで、変化を与える」ですが、サーバー上のもの( htmlファイルであれ、phpであれ)はアプリケーションBからhtmlファイルを生成するなどして書き換えられると思います。
しかしクライアントが見るWEBページは、サーバーから読み込んだもの(HTTPでGETした内容)=すなわちコピー=なので、サーバーから再読み込みしないとサーバーでの変更(htmlファイルの変更等)はクライアント側に反映されません。
サーバーからクライアント上のWEBブラウザに強制的に再読み込みさせる方法は思いつきませんが、はじめからwebページの中に、一定時間ごとに再読み込みさせるようなjavascriptを入れておけばいいのではないでしょうか。
5秒ごとに再読み込みするjavascript のサンプル
質問の意図を勘違いしていたらすみません。
上記で、うまくいきそうな気が。。
「アプリケーションBからhtmlファイルを生成する」
は面倒そうですが、(今の技術で)出来なさそうでは無いですね。
そもそもページ更新(新規でページ表示する時も含む)のタイミングで、
CGIを実行することが出来れば、(ポーリングであるけど)
要求に近いものになりそうです。出来るのか?
>> Webページの表示・更新のトリガーは、クライアントサイドのブラウザからのリクエストです。
やはりそうでしたか。。。何となく、そんな気はしたのですが。
>> ・Webページ内で、タイマーなどで定期的に変化を確認(リロード、または、Ajaxの利用)
ここでの"リロード"とは、ブラウザ側でのユーザー操作ですね。
これだと意味がありませね。
"Ajax"は、よく知りませんが難しそうですね。。