性格悪い人が優勝

サーバー上で、動く複数のアプリケーションの連携の仕方

最近、Webアプリの勉強を始めたばかりの者です。
家の中にサーバーを構築し、自分にとって役立つアプリケーションを走らせようと考えています。
(ネット上に一般公開はしません)

その際に行いたいのが、複数のアプリケーションの連携です。
例を挙げますと
WindowsOS上で、ApacheなどのWebサーバーが走っていたとします。
クライアントからの要求に応じて、
指定されたBMPファイルを、webアプリケーションが、Paintなどのexeを実行して開くといった具合です。

この仕組みを作るには、どうしたらよいのでしょうか。

標準的なやり方は存在するのでしょうか?
CentOS上ならこう出来るといった回答でも構いません。

以上、宜しくお願いいたします。

A 回答 (6件)

>webサーバーを動かしているPC上でブラウザを開き、


>たとえば、
>ttp://127.0.0.1/cgi-bin/test.pl
>のようなURLをブラウザのアドレスバーに入れて、webサーバーにアクセスしました。
(略)

そのwebサーバがどういう状態で起動されいるかにもよると思うんですけど。
既に書いてますけどWindowsのサービスとして起動されている場合、そこからGUIなアプリケーションを起動してもGUIを表示する先がないということはわかりませんか?

>webアプリケーション同士でデータをやり取りしたり、他のプログラムを起動したりというのは、サーバー上では、あまりやらないのでしょうか?

webアプリケーション同士でデータのやりとりはデータベースを扱うものならふつうにやることですし、
他のプログラムを起動したりもCGIで説明したようにふつうにやります。
ただwebアプリケーションが動いてるサーバーにあるプログラムを起動したいとかの理由で起動させることはやらないと思います。

この回答への補足

wormholeさん、回答ありがとうございます。

> そのwebサーバがどういう状態で起動されいるかにもよると思うんですけど。
webサーバは、サービスとして実行する場合と、 コンソールアプリケーションとして実行できる
場合があるのですね。
http://httpd.apache.org/docs/2.0/ja/invoking.html

apacheをコンソールアプリケーションとして実行し
他のPCのブラウザからサーバーにアクセスして、No.3の補足で書いたPerlを動かした結果、
サーバー側のPCでペイントが起動しました。

> 既に書いてますけどWindowsのサービスとして起動されている場合、
> そこからGUIなアプリケーションを起動してもGUIを表示する先がないということはわかりませんか?
そうなのですね。
Windowsのサービスとして、GUIをもつアプリケーションを起動しても
このアプリもサービスの一つとして起動するからでしょうか?

GUIを持たないアプリケーションならどうなのかと疑問に思い、
UIを持たないwavファイルを再生するexeを作成しました。
が、しかし、apacheをサービスとして実行した場合は、このexeでwavファイルを
再生することは出来ませんでした。

Windowsの起動時に(ログオン前に)、音楽が再生されているし、サービスであっても
音楽は再生できるのでは?

とまあ、色々と、疑問点も出てきましたが、
というか、Windowsのサービスの実体を知らないのが疑問の原因かと思います。

wormholeさんのおかげで、一つ勉強になりました。
ありがとうございます。

補足日時:2012/06/20 00:51
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/07/01 00:53

>家の中で使う自分専用のサーバーでして、ディスプレイもついています。

WindowsですのでGUIな環境です。

確かに、あなたがログオンしてる環境下ではGUIな環境でしょうね。
では、あなたがログオンしていない場合やWindowsのサービスはGUIな環境だと思いますか?

>自分の目的は、
>同じローカルネットワークの中で目的のPC(サーバー)を手元のPC、スマートフォンで楽に遠隔操作したいです。

それならブラウザで操作できるリモートアクセスソフトを使えばいいような気がしますけど。
http://www.teamviewer.com/ja/index.aspx とか。

この回答への補足

TeamViewer、多くのOSに対応していて便利ですね。
教えて頂いてありがとうございます。

以下、良ければ教えてください。(一番の目的は、以下の情報収集です)

webアプリケーション同士でデータをやり取りしたり、他のプログラムを起動したりというのは、
サーバー上では、あまりやらないのでしょうか?

標準的なやり方、仕組みは、存在するのでしょうか?

宜しくお願いします。

補足日時:2012/06/17 22:44
    • good
    • 0

>直接このPlファイルをダブルクリックすれば、ペイントは起動しましたが、


>ブラウザでこのソースファイルを指定したときは、しばらく問い合わせのままになり、
>ペイントが起動することはありませんでした。

>なぜでしょうか?

「ブラウザでこのソースファイルを指定したときは、」というのはブラウザから直接ソースファイルを参照したということですか?
もしそうであるならブラウザはCGIの事なんて知りませんから動かなくて当然なんですけど。

この回答への補足

回答ありがとうございます。

>「ブラウザでこのソースファイルを指定したときは、」というのはブラウザから直接ソースファイルを参照したということですか?
>もしそうであるならブラウザはCGIの事なんて知りませんから動かなくて当然なんですけど。

webサーバーを動かしているPC上でブラウザを開き、
たとえば、
ttp://127.0.0.1/cgi-bin/test.pl
のようなURLをブラウザのアドレスバーに入れて、webサーバーにアクセスしました。

結果はNo.3の補足に書いた結果になりました。

次に、
テキストファイルを作成する a.exeファイルをつくり、mspaint.exeと同じ場所に置き、
exeファイルを実行するplファイルを書きました。
`C:/Windows/System32/a.exe`;

そして、上記に書いた方法で、ブラウザでアクセスしました。
結果、a.exeは実行されました。(テキストファイルが作成されました)

他にも、色んなexeファイル(windows標準の電卓、Media player、フリーソフトのMedia player classic)を試してみましたが、
実行できたのは自作の a.exeのみでした。
どのexeもplファイルをダブルクリックすれば起動するのに、何処で止められているのか不思議です。

補足日時:2012/06/17 21:22
    • good
    • 0

>「サーバとクライアント間でのアプリケーションの連携」ではなく、


>「サーバ上で動くアプリケーションの連携」をしたいです。

そういうことでしたらサーバー側でアプリケーションを起動するだけなんですが(CGIとかはそうでしょ)。
ただ基本的にアプリケーションサーバなどはデーモンとしてUIを表示したりできる画面などがない状態で動いてますから、そこから起動されるアプリケーションも同様に画面などがない(Windowを表示する先がない)ということは理解されてますか?

誰かのアカウントでログオンしたままフォアグラウンドでアプリケーションサーバーを動かすとかになるとまた話は変わりますが。

この回答への補足

回答ありがとうございます。

> ただ基本的にアプリケーションサーバなどはデーモンとしてUIを表示したりできる
> 画面などがない状態で動いてますから、そこから起動されるアプリケーションも
> 同様に画面などがない(Windowを表示する先がない)ということは理解されてますか?

家の中で使う自分専用のサーバーでして、ディスプレイもついています。WindowsですのでGUIな環境です。
一般的なサーバーは、そういった表示の機能が必要無いため、メンテナンス時等にリモート操作する
のかと思います。

自分の目的は、
同じローカルネットワークの中で目的のPC(サーバー)を手元のPC、スマートフォンで楽に遠隔操作したいです。

わざわざ、クライアント、サーバーという形にしたのは、ブラウザというどんなクライアントPCにも、
入っているソフトを使いたかった為です。


>そういうことでしたらサーバー側でアプリケーションを起動するだけなんですが(CGIとかはそうでしょ)。

CGIはPerlを使うのが一般的と本で読んだので、
perlが動く環境を作り、以下のソースを書いて実行してみました。

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "TEST\n";
print "</HTML>\n";
`mspaint.exe`;

結果、
直接このPlファイルをダブルクリックすれば、ペイントは起動しましたが、
ブラウザでこのソースファイルを指定したときは、しばらく問い合わせのままになり、
ペイントが起動することはありませんでした。

なぜでしょうか?
使用したブラウザはGoogle Chrome,IEです。

補足日時:2012/06/16 20:03
    • good
    • 0

http://www.site-cooler.com/tips/asp_runserverexe …

こういうこと??
Windowsサーバ上のpaintを起動させたいんですかね??
クライアントには一切何が起きたかわからないようになる
でしょうけど。

クライアント側のbmpファイルが指定されるなら、一度
アップロードされるわけですから、mspaintの起動パラメータに
指定してあげればいいのでは。

この回答への補足

回答ありがとうございます。

>Windowsサーバ上のpaintを起動させたいんですかね??
そうです

>クライアントには一切何が起きたかわからないようになる
でしょうけど。
構いません

なるほどASPでは、そういった手段があるのですね。

PHPで同じ事をしようとして、
execという関数で、電卓を起動しようとしましたが、出来ませんでした。

アプリ同士の連携というのはあまりやらないのでしょうか?
たとえば、アプリケーションサーバーを役割ごとに複数台数稼動しておいて
お互いに連携しあうとか。

補足日時:2012/06/16 08:49
    • good
    • 0

>クライアントからの要求に応じて、


>指定されたBMPファイルを、webアプリケーションが、Paintなどのexeを実行して開くといった具合です。

そのPaintなどのアプリケーションはクライアント上で動かすんじゃないですか?
それだと「サーバ上で動くアプリケーションの連携」ではなく「サーバとクライアント間でのアプリケーションの連携」になりません?

この回答への補足

回答ありがとうございます。
「サーバとクライアント間でのアプリケーションの連携」ではなく、
「サーバ上で動くアプリケーションの連携」をしたいです。

「クライアントが、サーバーからサービスを受ける」為にサーバーを構築するのではなく
「クライアントからの指示で、サーバーを操作する」使い方をしたいです。

何か良い方法がありましたらご教授ください。

補足日時:2012/06/16 07:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!