Download - 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
![Page 1: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/1.jpg)
ReactPHPは もっと流行って欲しい
1CPUあたり500req/sを超えるHelloWorldを 実装する方法について
![Page 2: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/2.jpg)
たなかひさてる @tanakahisateru
Pinoco developerPHPTAL contributorFirebug translation contributorYii framework userPhpStorm user
フルスタックエンジニア(笑)
![Page 3: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/3.jpg)
ReactPHP• PHPでNode.jsのようなノンブロッキングI/O
• ひとつのプログラムがメモリに常駐
• I/O待ちの間に別のイベントの処理を同一プロセス内で実行
• というわけでプロセス数に対する効率が非常に高い並列処理が可能
![Page 4: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/4.jpg)
例としてreact-httpで
![Page 5: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/5.jpg)
普通のPHP
![Page 6: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/6.jpg)
react-http
![Page 7: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/7.jpg)
毎回やること
最初だけやること初期化前倒し
PHP react-http
![Page 8: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/8.jpg)
これまでPHPerが知っていたそれは、他の言語からすれば全然マイクロフレームワークじゃなかった
![Page 9: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/9.jpg)
Hello World デモ
![Page 10: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/10.jpg)
Silex nginx php-fpm
![Page 11: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/11.jpg)
Silex nginx php-fpm
![Page 12: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/12.jpg)
Silex nginx php-fpm
228.54 trans/sec
![Page 13: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/13.jpg)
react-http nginx
メンテ状況微妙なespressoをreact-0.4で動くようにして利用 espressoはSilexをベースにしたreact-httpのWAFです
![Page 14: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/14.jpg)
react-http nginx
![Page 15: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/15.jpg)
react-http nginx
734.81 trans/sec
![Page 16: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/16.jpg)
通常の3倍
![Page 17: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/17.jpg)
ちなみに…
![Page 18: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/18.jpg)
<?php echo
![Page 19: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/19.jpg)
<?php echo
1735.65 trans/sec
![Page 20: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/20.jpg)
<?php echo 最強
![Page 21: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/21.jpg)
まあネタはこのぐらいにして
![Page 22: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/22.jpg)
速さではない 本当のメリット
![Page 23: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/23.jpg)
レスポンス完了
…のあと、裏でやって おけばいいこと
![Page 24: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/24.jpg)
応用アイデア• サイト上で他の多くのユーザーにプッシュ通知が発生するイベントが起きる
• イベントを起こした人にはレスポンスを返してしまい、その後で通知を分散処理 (react-zmq)
• 他のWeb SocketホストはすべてPub/Subで受ける
• レスポンス後でいいタスクは細切れのジョブにして、それを複数のワーカーが1件づつ取って処理する
![Page 25: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/25.jpg)
というわけで HelloWorld とかどうでもいいです
![Page 26: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/26.jpg)
本当は• PHPのWebページはロードバランサーで簡単にスケールアウト可能 → Reactそんなに嬉しくない
• バックエンド側で、ユーザーへのレスポンスより遅れてもいい、高負荷なタスクのための内部REST等に使う
• 裏でボトルネックになるシステム(ジョブキューの受付など)が大量の同時接続を処理したい時に有効
![Page 27: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/27.jpg)
Webページには ReactPHP不要
• PHPのメリット = レスポンスを返せばすべて終わり
• 次のリクエストはすべて空っぽの状態から始まる、だからPHPは安全で開発しやすい
• レスポンスを返すのが目的の本質なら、普通にPHPのフルスタックフレームワークを使うべき
• でも、PHPの便利さを犠牲にしてでも、初期化の前倒しによる高速化と大量同時接続の受付が必要なとき…
![Page 28: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/28.jpg)
• Node.js → コールバック地獄かPromise地獄、一瞬でも同期I/Oが許されないきつさ
• Go → ライブラリが…
• Erlang → 文法が…
• Scala Actor → コンパイル…JVM…
• PHP → みんなだいすき♪ サイト用のライブラリが再利用できる サイトと同じツールで開発できる 一瞬で済むなら同期I/Oしてもいいよね、よね
![Page 29: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/29.jpg)
注意したいこと• ずっとメモリに常駐するので、ヘタすると普通PHPでは起きないようなメモリリークが起きます。たまに再起動する必要があるかも
• リクエストがクラスを専有できないからstatic使うライブラリはダメです(I/O待ちに入ったら別のリクエストにstaticやシングルトンを上書きされちゃう)
• Laravel、Yii、FuelPHP、あとCake3のコードの再利用はたぶんアウト
• で、SymfonyのHttpKernelはいけるので、ここに来てSilexが急浮上することになります → GitHubで php-pm 参照
![Page 30: 第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai](https://reader035.vdocuments.net/reader035/viewer/2022081512/55a6727c1a28ab88208b4677/html5/thumbnails/30.jpg)
こんなReactPHPのことを喋ってみたい人はぜひ、 PHPカンファレンス関西へ