PHP言語は、Webプログラミング言語の短いライフサイクルで、多くのPHPerはFPMの下で、プログラミングの考え方を形成しています。実際には、Swooleが表示された後、このシリアルプログラミングモデルは、すでに破損しています。使用Swooleは、簡単に、より柔軟な並列プログラミングを実現することができます。
アプリケーションのシナリオは、
クイズを提出する3人の選手の後に勝者を表示し、我々はウェブゲームのじゃんけんになりたいと仮定します。従来のシリアル化されたWebプログラミングでは、我々は一般的な考え方は、このですがあります。
セットフォームフォームは、ユーザーを保存することのMySQL / Redisのストアにクイズを送信
完了していない場合は、表示が提出する他の誰かを待っている、結果を確認するためにボタンを追加します。3人のすべての個人は、クエリの保存を提出し、最終的な結果を表示する場合は
並行プログラミングを
並行プログラミングSwoole実装にこのシーンをメモリにクイズを完了することができるのMySQL / Redisのストレージに依存することなく、使用することができます。
ユーザーがクイズを送信すると、結果を返しませんライブ要求は、ユーザーが待機状態に入る保持します。メモリに保持され、現在の接続要求
のすべての個人、メモリ関連の要求から取られ、3を提出する計算の内容とすべての要求に応答を送信が通過するとき
のコーディング
1 <?PHP 2 $サーバー = 新しい Swoole \のHttp \サーバー( '127.0.0.1'、9501、SWOOLE_BASE)。 3 $結果 = []; 4 $サーバ - >( '要求'、上関数($ REQ、$ RESP)使用(&$結果){ 5 の$ RESP - > ヘッダ( 'のContent-Type'、 'text / htmlの;のcharset = UTF-8' ); 6 場合($ REQ - >サーバ[ 'REQUEST_METHOD'] == 'GET' ){ 7 $ RESP - > 端(」 <メタHTTP-当量= "Content-Typeの"コンテンツ= "text / htmlの;のcharset = UTF-8" /> 9 <フォームメソッド= "POST" ACTION = ""> 10 <入力タイプ= "ラジオ"値=」石头」NAME = "結果">石头 11 の<input type = "ラジオ"値= "剪刀" NAME = "結果">剪刀 12 の<input type = "ラジオ"値= "布" NAME = "結果">布 13 <ボタン型= "送信">提交</ボタン> 14 </フォーム> 15 ' )。 16 } 他{ 17 $の結果が [ $ reqが - > [ 'name'を取得します ]] = [ $ reqは、$ RESP ]。 18 もし(数($結果)== 3){ 19 $アウト = '' ; 20 foreachの($結果 として $ ARR ){ 21 [ $ _req、$ _resp ] = $ ARR 。 22 $アウト =。$ _req - > GET [ '名前']。 ":"。_req $。 - >ポスト[ '結果'] "<br /> \ n"は、 23 } 24 foreachの($結果 として $ ARR ){ 25 [ $ _req、$ _resp ] = $ ARR 。 26 $ _resp - > 終了($アウト)。 27 } 28 $結果 = []; 29 } 30 } 31 }); 32 $サーバ - >起動();
プログラムの実行
PHPのgame.php
オープン3クロームタブページ。求心性の名前とURLは3人のユーザーを表すA、B、Cです。
最初に、結果の提出の二回目は、結果を返しませんでした、Chromeはリターン結果にサーバーを待って旋回しています。フォームは3つの第三タブページを提出し、その結果を返しているとき。
並行性の問題は、
並行プログラミングは、シリアルプログラミングと、より複雑なよりも強力です。:シリアルプログラミングはありません前に、並行プログラミングのような、新たな問題が発生します
データ同期
のコンテキスト管理
タイミングの問題
より厳格なエンジニアリングの思考スキルだけでなく、より深いプログラミングのスキルを開発する必要性を持っている人を持っている開発者を必要としています。
パラダイムシフト
Swooleが実際にPHPプログラミングモード覆す、プログラマの観点を作っしても、もはやリクエストの処理に限定され、もはやデータベース豆腐操作、インターフェース呼び出しに限られません。コルーチンSwoole4と組み合わせて使用する複雑な相互作用のメモリ空間の様々な達成することができ、プログラマビリティを提供します。
PHPerが簡単にオンラインゲーム、サーバシステム、スマートホーム、ネットワーキングおよび他のプロジェクトを達成することを可能にする新しいプログラミングモデル。