人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WEBページとアプリケーションとで、情報のやり取りを行う方法を教えて下さい。

<環境>
サーバ側
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の動作メカニズム?についての紹介されたページもあれば、
併せて教えて下さい。

以上、
よろしくお願いします。

●質問者: futurista
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Apache CGI HTTP I/O Linux
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● t_shiono
●50ポイント

Webページの表示・更新のトリガーは、クライアントサイドのブラウザからのリクエストです。

そのため、サーバサイドのアプリケーションBによって、クライアントのブラウザの表示を変更することはできません。


ご希望の動作の実現としては、

・Webページ内で、タイマーなどで定期的に変化を確認(リロード、または、Ajaxの利用)

・アプリケーションBは状況の変化をCGIがアクセス可能なデータとして格納(DB、ファイルなど)

・CGIは格納されたデータを元に出力する

という3つの動作を行わせることになります。

ダミー(http://q.hatena.ne.jp/1182334464)

◎質問者からの返答

>> Webページの表示・更新のトリガーは、クライアントサイドのブラウザからのリクエストです。

やはりそうでしたか。。。何となく、そんな気はしたのですが。

>> ・Webページ内で、タイマーなどで定期的に変化を確認(リロード、または、Ajaxの利用)

ここでの"リロード"とは、ブラウザ側でのユーザー操作ですね。

これだと意味がありませね。

"Ajax"は、よく知りませんが難しそうですね。。


2 ● SALINGER
●50ポイント

厳密に言うとできます。

Cometという技術を使うことで、プラウザ上でリアルタイムチャットとかは実現できます。

リアルタイムチャットっていうのは、サーバ上のデータが更新されたタイミングで接続しているプラウザの表示を変えるので質問の意図にそいます。

仕組みはAJAXのXMLHTTPRequestをサーバ上で保持して、任意のタイミングでレスポンスを返すことで実現するのですが、

かなり高等技術でJavaとかで実現するようです。

他にも同じような技術でLingerとかもあります。

Lingerでリアルタイムチャットを実現してるサイトです。

http://www.lingr.com/room/masuda

まあ、難しい技術なんでできないと思っても問題ありません。

◎質問者からの返答

やはり難しいですか。

アプリケーションBがメインのお仕事で、WEB表示部分には、

あまり時間かけてられないので、手軽な方法ないかなと思っていたのですが。


3 ● fuentebella
●50ポイント

「WEBページにアプリケーションBからの何らかのトリガーで、変化を与える」ですが、サーバー上のもの( htmlファイルであれ、phpであれ)はアプリケーションBからhtmlファイルを生成するなどして書き換えられると思います。

しかしクライアントが見るWEBページは、サーバーから読み込んだもの(HTTPでGETした内容)=すなわちコピー=なので、サーバーから再読み込みしないとサーバーでの変更(htmlファイルの変更等)はクライアント側に反映されません。

サーバーからクライアント上のWEBブラウザに強制的に再読み込みさせる方法は思いつきませんが、はじめからwebページの中に、一定時間ごとに再読み込みさせるようなjavascriptを入れておけばいいのではないでしょうか。

5秒ごとに再読み込みするjavascript のサンプル

http://www.htmq.com/js/location_reload.shtml

質問の意図を勘違いしていたらすみません。

◎質問者からの返答

上記で、うまくいきそうな気が。。

「アプリケーションBからhtmlファイルを生成する」

は面倒そうですが、(今の技術で)出来なさそうでは無いですね。

そもそもページ更新(新規でページ表示する時も含む)のタイミングで、

CGIを実行することが出来れば、(ポーリングであるけど)

要求に近いものになりそうです。出来るのか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ