2011-09-11 4 views
1

私は、新しいプロセスの作成やフォークなどのためにphpで利用できるさまざまな方法に精通しています。私が読んだことはすべて、Webアクセス可能なアプリケーション内からpcntl_forkを使用することを強要します。なぜこれが推奨されないのか誰にでも教えてもらえますか?PHP - Webアプリケーションからpcntl_forkを呼び出す(cliではない) - どうしてですか?

基本的なレベルで、私はあなたが慎重でない場合、物事がすぐに手を抜けることができる方法を見ることができます。しかし、あなたが慎重であればどうでしょうか?私の場合、私の親スクリプトを新しい子にpcntl_forkし、短い一連の特定の関数を実行してから、子を閉じたいと思います。かなり簡単ですよね?これをやってみるとまだ危険でしょうか?

これに関連して、これとは別のやり方でオーバーヘッドについて話す人はいますか...全く新しいPHPプロセスを起動するためにproc_open()を呼び出しますか?新しいプロセスを開始しなければならないので、スピードアップを失うことはありますか?

背景:fastcgiを実行している約2000人の同時ユーザーがいるサイトを考えてみましょう。

+0

2000人の同時ユーザーですか?あなたはnodejsのような何かを非同期で使うことを考えましたか? – ThiefMaster

+0

私はすべての可能性に開放しています。 Node.JSでこの作業をどのように行うのか説明できますか?私の親のPHPスクリプトから、別のPHPメソッドを非同期的に実行したいのです... Node.JSはどのようにこの機能を提供しますか? – tambler

+0

もちろんPHPでは動作しません。 – ThiefMaster

答えて

0

あなたは新しいプロセスを「フォークする」ためのギヤマンを考えましたか?これは「分散フォーク機構」とも呼ばれ、従業員は同じマシン上にいる必要はありません。

同期呼び出しと非同期呼び出しも使用できます。

ここにはhttp://gearman.org/がありますが、それは問題の候補として考えられます。

+0

私はGearmanを見ます。私は、単にメッセージ/ジョブキューイングのメカニズムを提供していることを理解していました。明らかに、私が探しているのは、PHP内でジョブを非同期的に実行する方法です。キューに入れられたジョブではありません。あなたはギアマンがこれをすることができると言っていますか?私は見てみましょう、ありがとう。 – tambler

0

私は別の可能性を提案したいと思います...あなたはこれについてどう思いますか教えてください。

マスターアプリケーションサーバーからのジョブ要求に応答する唯一の仕事を持つWebサーバーのプールを作成した場合はどうなりますか? -

  • アプリケーションワーカーサーバー(Apacheのは、PHP - のFastCGI)
  • アプリケーションワーカーサーバー(Apacheのは、PHP - のFastCGI)

    マスターアプリケーションサーバ(のFastCGIのApache、PHP):私はこのような何かを持っているでしょう

  • アプリケーションワーカーサーバー(Apacheのは、PHP - のFastCGI)
  • アプリケーションワーカーサーバー(Apacheのは、PHP - のFastCGI)

マスターアプリケーションサーバーで新しいPHPプロセスを生成するのではなく、非同期ソケットを使用して「ワーカー」にジョブ要求を送信します。その後、これらのジョブをリアルタイムで実行し、その結果をメインのアプリケーションサーバーに戻します。

誰でもこれを試しましたか?あなたは何か問題を予見していますか?これはすばらしく働くかもしれないと私には思われます。

+0

どのように実装しますか?それは答えにあるはずです。そうでない場合、それは答えではなく、あなたの質問への更新です(または新しい質問に合っているかもしれません)。 –

0

問題は、アプリがウェブにアクセスできるということではありません。

Webサーバー(またはここではFastCGIモジュール)がフォークをうまく処理できないという問題があります。ただ自分で試してみてください。

+0

私は参照してください。説明をありがとうございます。 – tambler

関連する問題