28

ノンブロッキング アプリケーションを作成したい。私はapache2を使用していますが、nginxとApacheプロセスに関するその利点について読んでいました。nginx用のApacheを変更することを検討しています。私の質問は、php と nginx でノンブロッキング Web アプリケーションを作成することは可能ですか?.

それとも、nginx で uwsgi や gunicorn のようなリバース プロキシを使用して、Python でこれを試してみたほうがよいでしょうか? それともnodejsを学ぶための解決策ですか?

4

5 に答える 5

19

非ブロッキング アプリケーションを php で作成することは可能ですが、それを念頭に置いて作成されていないため、おそらく最適な環境ではありません。プロセス制御ライブラリPCNTLを使用して、子プロセスを適切に制御できますが、他の環境と同じような使いやすさは得られません。

Python はよくわかりませんが、個人的にはnodejsを使用することをお勧めします。これはかなり新しいテクノロジーです。それは事実ですが、そこではすべてがブロックされておらず、そのように意図されています。基本的に、あなたが持っているのは単一のスレッド (このニュース バージョンでは必要に応じて拡張できます) であり、文字通りすべて (別の方法で実行するように指示する場合を除く) はイベント駆動型になり、プロセス キューに次のように処理するためのスペースが残されます。期待される!

Nodejs は非常に簡単に習得できます。Web アプリケーションに出くわしたことがあるなら、とにかく JavaScript を知っているはずです! まだ十分に文書化されていませんが、ダウンロードしてすぐに使用できる、すぐに使用できるモジュールが多数あります。

于 2013-05-01T05:43:54.307 に答える
8

私の知る限り、ノンブロッキング アプリケーションを構築するために利用できるライブラリがいくつかあります。

  1. Skyray、C で記述された PHP 用のネットワーク ライブラリhttp://github.com/bixuehujin/skyray
  2. 上記のように、純粋なPHPで書かれたreactphp
  3. スウール、https://github.com/swoole/swoole-src
  4. phpdaemon、https://github.com/kakserpom/phpdaemon

ところで: 私は Skyray の作成者であり、swoole の開発者の 1 人です。

于 2015-04-25T09:07:49.750 に答える
6

Swooleは、ノンブロッキング php アプリケーションを作成するのに適しています。

以下に例を示します。

$fp = stream_socket_client("tcp://127.0.0.1:80", $code, $msg, 3);
$http_request = "GET /index.html HTTP/1.1\r\n\r\n";
fwrite($fp, $http_request);
swoole_event_add($fp, function($fp){
    echo fread($fp, 8192);
    swoole_event_del($fp);
    fclose($fp);
});
swoole_timer_after(2000, function() {
    echo "2000ms timeout\n";
});
swoole_timer_tick(1000, function() {
    echo "1000ms interval\n";
});
于 2015-10-28T10:50:37.417 に答える
6

プッシュピンはまだ見ていませんが、PHP でノンブロッキング アプリケーションをサポートする別のフレームワークを指すためにこの回答を書いています。

React http://reactphp.org/

HTTP または WebSocket へのサーバーのバインドをサポートし、HTTP 経由で (proxy_pass を使用して) 要求を転送することにより、Nginx などの Web サーバー ソフトウェアで使用できます。Web サーバーで HTTPS を使用して、暗号化されていないものを転送することもできます。(React での SSL サポートは不足しています。)

少なくとも上流のプロジェクトでは、FastCGI または UWSGI のサポートはまだないようです。

スタイルは node.js の記述に似ており、PHP 5.3+ クロージャーをイベントにアタッチし、非ブロッキング ソケットを透過的に使用します。そのウェブサイトには良い例があるので、ユースケースを具体的に求めていないので、ここでは繰り返しません。

更新: プッシュピンの Web サイトを見たところ、質問のタイトルで要求されているように、ノンブロッキングPHPアプリケーションを作成するためのフレームワークまたはツールではありません。ただし、ソリューションの一部として役立つようです。

于 2013-06-20T07:21:35.130 に答える
2

多くの労力をかけずにノンブロッキング アプリを使用したい場合は、pushpinを使用してみてください。私は自分のアプリケーションの 1 つでそれを使用していますが、うまく機能します。詳細については、著者のブログ投稿を参照してください。これを既存のプロジェクトの上に追加しましたが、既存のコードはほとんど変更していません。

ノードを使用する場合は、これがジョブに適したツールであることを確認してください。その質問にはすでに回答があるため、スタック オーバーフローの質問を確認してください。アプリケーションのアイデアがノードの機能に適合するかどうかを自問してください。ノード js を使用する理由とタイミングを試してください。およびNodeJS をいつ使用するかを決定する方法は? 例えば。

于 2013-05-01T06:00:58.623 に答える