スミアPHP

画像



この日が来ると、PHPの1つのスレッドでは十分ではないことがわかります。



まず、コードを最適化してから、非同期の反応に心を変えようとしますが、PHPの世界全体はこの欲求を理解したくありません。 phthreadsを見ますが、Javaの並行処理の後、どこかで「トリック」されたと感じます。 そして、あなたがプロセスを離れ、exec'ahと信号の分岐点で窒息し始めると決めるとき、あなたはこれ以上潜ることができないことを理解するでしょう。 そして最後に、これらすべてからポップアップして、MOM(メッセージ指向ミドルウェア)の島に行きます。



ああ、しかし、どんな種類のカービー売り手が今そこにいますか:RabbitMQ、ActiveMQ、Kafka、Kestrel、そしてRedis pub / subさえも取り上げています。 そして、すべてが順調です。すべてが最高、高速、トラブルフリーです。 しかし、小さな災害があります-一歩一歩、そしてこんにちは、あなたは回避策と奇妙なスキームを探してスタックオーバーフローの群衆の中にいます。 そして、これはZeroMQが見つかるまで続きます。



これは何? ZeroMQは、スケーラブルな分散アプリケーションまたは並列アプリケーションで使用するための高性能な非同期メッセージング指向のライブラリです。 しかし、他のメッセージ指向のミドルウェアとは異なり、壊れることがなく、サーバーがなくても機能します。







それから彼らは何を提供しますか? そして、これらの人は、主要なメッセージパターンに最適化されたステロイドのソケットセットを提供し、必要に応じて使用できます。 彼らの助けを借りて、あらゆるトポロジーと複雑さを備えたネットワークを構築できます。



また、独自の宗派ドックhttp://zguide.zeromq.org/page:allもあります。 0mqを使用するかどうかに関係なく、脳を正しい方向に適切に設定しますが、マルチスレッドプログラミングを使用できる場合は、部分的にスクロールできます。



乾燥残渣中:






それはすべて非常にクールに聞こえます! 十分な理論があれば、 www.gliffy.comにアクセスして、システムを激しく設計してください。 そして、次のものが必要です。



画像







アーキテクチャはシンプルで、すべてのコンポーネントはビジネスロジックとは別に記述され、作曲家用のパッケージで装飾され、githubに保存されました。



https://github.com/limitium/zmq



掘るには、次のものが必要です(たとえば、Debian):


1. ZeroMQをインストールします


sudo apt-get update -qq sudo apt-get install -y libzmq3-dev
      
      





2. php-zmqバインディングをインストールします


  git clone https://github.com/mkoppanen/php-zmq.git sh -c "cd php-zmq && phpize && ./configure && make --silent && sudo make install" echo "extension=zmq.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
      
      





3. composerを介してlibをインストールします


  composer require limitium/zmq
      
      







次に、たとえばpsr-3ロガーを使用して、その動作を確認します。

ロガー

  $logger = new ZLogger('my_service_1', 'tcp://127.0.0.1:5555'); $logger->info("core is stable"); $logger->emergency("we're all going to die!");
      
      





ログコレクター

  (new Concentrator('tcp://127.0.0.1:5555')) ->setReceiver(function ($logMsg) { $serviceName = $logMsg[0]; $time = $logMsg[1]; $logLevel = $logMsg[2]; $logMsg = $logMsg[3]; }) ->listen();
      
      





すべてがシンプルで、ZeroMQパンのおかげで、ロガーは1つのプロセスのフレームワーク内で動作し、100,500台のサーバーから情報を収集できます。



タスクジェネレーターとワーカーの例

発電機

  (new Ventilator('tcp://127.0.0.1:5555')) ->setGenerator(function () { sleep(1); return rand(); }) ->setResponder(function ($msg) { echo $msg; }) ->listen();
      
      





労働者

  (new Worker('tcp://127.0.0.1:5555')) ->setExecutor(function ($msg) { return $msg + $msg; }) ->work();
      
      







そして最後に、平凡なパブ/サブ

出版社

  $pub = new Publisher('tcp://127.0.0.1:5555'); $pub->send('azaza');
      
      





加入者

  (new Subscriber('tcp://127.0.0.1:5555')) ->setListener(function ($msg){ echo $msg; }) ->listen();
      
      







ZeroMQの唯一のマイナス点は、注目に値しますが、システムに必要なインターデザインが増えるほど、コードを書く必要が増えることです。 しかし、2行のコードですべてが開始されることを誰が気にしますか?



All Articles