#php の既存のアプリケーション メソッドはすべて http に基づいており、高速なリアルタイム応答が必要な状況には比較的弱いです。たとえば、オンライン ゲームやプッシュ サービスは通常、ユーザーとの長期的なコミュニケーションを維持するため、リアルタイムの応答とプッシュ情報のための TCP 接続。
#swoole は、このようなアプリケーション シナリオを解決するように設計されています。 (推奨学習: SWOOLE ビデオ チュートリアル )
# Swoole の実現
Swoole は、他のサードパーティに依存せず、純粋な C で書かれています。 -party ライブラリ 。
swoole は libevent を使用しないため、libevent をインストールする必要はありません
swoole は PHP の stream/sockets/pcntl/posix/sysvmsg およびその他の拡張機能に依存しません
socket パート
swoole は、基礎となるソケット システム コールを使用します。
IO イベント ループ
メイン プロセスのイベント ループは select/poll を使用します。メイン スレッドには少数のファイル記述子しかないため、select/ を使用するだけです。 poll
リアクター スレッド/ワーカー プロセスで epoll/kqueue を使用します
タスク プロセスにはイベント ループがなく、プロセスは循環して読み取りパイプをブロックします
多くの人は strace -p を使用して swoole を表示します。メインプロセスは、poll システムコールのみを参照できます。正しい表示方法は strace -f -p
複数のプロセス/マルチスレッド
複数のプロセスは fork() システム コールを使用します
Multipleスレッドは pthread スレッド ライブラリを使用します。
EventFd
Swoole は、スレッド/プロセス間メッセージ通知のメカニズムとして、eventfd を使用します。
Timerfd
Swoole は timerfd を使用してタイマーを実装します
SIgnalfd
signalfd は swoole で使用されます信号のシールドと処理を実現します。これにより、スレッド/プロセスがシグナルによって中断されたり、システム呼び出しが再起動されたりする問題を効果的に回避できます。リアクター スレッドはメイン プロセスでシグナルを受け取りません。
以上がスウールはどのような問題を解決しましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。