SlideShare a Scribd company logo
1 of 8
Download to read offline
PHP非同期の技法
Shogo Kawahara <kawahara@bucyou.net>
#phpkansai 2014.06.28
● 東京から仙台まで歩く (いま宇都宮でセーブし
ている)
● PHPで (ほかの言語ではできるような) PHPっ
ぽくないことをやる
○ PHPとJavaScriptの噺: http://www.slideshare.
net/ooharabucyou/phpjava-script
● PHPは保守でしかやってない :)
最近の趣味
今回のテーマは “非同期”
● PHPで時間のかかるバックグラウンドな処理を
実装したい
○ 管理画面とかで巨大なファイル作ったり
○ 変な計算したり
POST /makeCsv
202 Accepted
Start to make CSV file
BackgroundWeb ServerUser
今回紹介する方法
● Background Process
● React
● Hack Lang (おまけ)
Backgrond Process
https://github.
com/kohkimakimoto/BackgroundProcess
● Demo: https://github.com/kawahara/async-php-demo-1
● Background でプロセスを起動させる便利なラ
イブラリ
● プロセス用PHP作って nohup で起動
○ プロセス管理用ファイルやらを作って、正常
終了したら勝手に削除してくれる
○ とてもお気軽
React PHP
● http://reactphp.org/
● まるで node.js のようなページの佇まい
● コールバック天国へようこそ
● サーバアプリを書いちゃえ
● Demo: https://github.com/kawahara/async-php-demo-2
Hack Lang
● http://hacklang.org/
● もはや PHP じゃない
● async function という素敵な機能あり
● FastCGI mode のとき、今回の事例のような用
途で使うのは辛いか?
● Demo: https://gist.github.com/kawahara/5aa3a45d575a07384af6
まとめ
● PHPでも非同期な実装はできる
● でも、余裕あるならなんかメッセージキューな
サーバとか組んだほうがいいっす。 (RabbitMQ
とか)
● Hack Lang の async は本来の処理以外
(logging とか profiling) や、複数のResourceに
並行にアクセスする際に利用できそう。そういう
Hack Lang 用のフレームワークができる気がす
る。

More Related Content

What's hot

PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
Yoshio Hanawa
 
Cake php + php unitによる実践的ユニットテスト
Cake php + php unitによる実践的ユニットテストCake php + php unitによる実践的ユニットテスト
Cake php + php unitによる実践的ユニットテスト
慶信 若松
 
CakePHP(例えば2系)のテスト
CakePHP(例えば2系)のテストCakePHP(例えば2系)のテスト
CakePHP(例えば2系)のテスト
monmon Kumagai
 

What's hot (20)

PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
 
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMSDrupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
 
Cake php + php unitによる実践的ユニットテスト
Cake php + php unitによる実践的ユニットテストCake php + php unitによる実践的ユニットテスト
Cake php + php unitによる実践的ユニットテスト
 
CakePHP(例えば2系)のテスト
CakePHP(例えば2系)のテストCakePHP(例えば2系)のテスト
CakePHP(例えば2系)のテスト
 
Jenkins tips 20161014
Jenkins tips 20161014Jenkins tips 20161014
Jenkins tips 20161014
 
よりよいPHPUnitの実行方法を求めて
よりよいPHPUnitの実行方法を求めてよりよいPHPUnitの実行方法を求めて
よりよいPHPUnitの実行方法を求めて
 
最近流行りのビルドツールとは
最近流行りのビルドツールとは最近流行りのビルドツールとは
最近流行りのビルドツールとは
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-async
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarking
 
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgentGoで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
Goで書くNeoVimプラグイン - OpenAppLab Aizu LT feat. CyberAgent
 
Blenderを用いたリグ転送実験
Blenderを用いたリグ転送実験Blenderを用いたリグ転送実験
Blenderを用いたリグ転送実験
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
 
ふつうのcore.async
ふつうのcore.asyncふつうのcore.async
ふつうのcore.async
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッションPHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
 

Viewers also liked

Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
 
A Cost-Effective and Scalable Merge Sort Tree on FPGAs
A Cost-Effective and Scalable Merge Sort Tree on FPGAsA Cost-Effective and Scalable Merge Sort Tree on FPGAs
A Cost-Effective and Scalable Merge Sort Tree on FPGAs
Takuma Usui
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
 
非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話
Takaaki Hirano
 
プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介
Takaaki Hirano
 
WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホン
You_Kinjoh
 

Viewers also liked (12)

Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
 
A Cost-Effective and Scalable Merge Sort Tree on FPGAs
A Cost-Effective and Scalable Merge Sort Tree on FPGAsA Cost-Effective and Scalable Merge Sort Tree on FPGAs
A Cost-Effective and Scalable Merge Sort Tree on FPGAs
 
Composer
 Composer Composer
Composer
 
Phpmatsuri2013
Phpmatsuri2013Phpmatsuri2013
Phpmatsuri2013
 
東京から仙台まで歩く方法
東京から仙台まで歩く方法東京から仙台まで歩く方法
東京から仙台まで歩く方法
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
curl_multi_exec()でFire-and-forgetに失敗した話
curl_multi_exec()でFire-and-forgetに失敗した話curl_multi_exec()でFire-and-forgetに失敗した話
curl_multi_exec()でFire-and-forgetに失敗した話
 
非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話
 
このPHP拡張がすごい!2017
このPHP拡張がすごい!2017このPHP拡張がすごい!2017
このPHP拡張がすごい!2017
 
WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする
 
プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介
 
WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホン
 

Similar to Php非同期の技法

なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LTまだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
77web
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
Takeshi Arabiki
 

Similar to Php非同期の技法 (20)

FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御する
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
PHP AV BINDING
PHP AV BINDINGPHP AV BINDING
PHP AV BINDING
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
 
Xhprof
XhprofXhprof
Xhprof
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告
 
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LTまだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansai
 
Apache EventMesh を使ってみた
Apache EventMesh を使ってみたApache EventMesh を使ってみた
Apache EventMesh を使ってみた
 
Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるには
 
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyPHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
 
PSGIへの誘い
PSGIへの誘いPSGIへの誘い
PSGIへの誘い
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!
 
Introduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature EngineersIntroduction to Favmemo for Immature Engineers
Introduction to Favmemo for Immature Engineers
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 

Php非同期の技法