SlideShare a Scribd company logo
1 of 18
Download to read offline
アプリケーションサーバーを作ろう
自己紹介
@motoyan_k
Haxeというプログラミング言語がお気に入りのプログラマ。
普段はRails書いてます。
僕にとってのPHPは戦友みたいなものです。
モチベーション
● PHP7の登場でPHP自身の速度が十分に早くなった。
● PHPのバックエンドの実装はapacheかphp-fpmぐらいしかなくちょっと寂しい現状。
● ReactPHPとかあるし、PHP単体でアプリケーションサーバーが書かれた実績はあ
る。
そうだ、
PHPでアプリケーションサーバーを書いてみよう!
PHPでもWEBサーバーは作れる
ノンブロッキングIOも出来る
プロセスもつくれるんです
PHPでアプリケーションサーバーを作る意義
● アプリケーションサーバーをPHPで書けばPHP書ける人がメンテナンス出来るよ
ね?
● apacheやphp-fpmに依存してたプロセス戦略がPHPコードで実現出来るようにな
る。
● ライブラリ化して、composerなどで配布することでアプリケーションサーバーの挿げ
替えが簡単になる。
DEMO
複数のプロセスをスタンバイさせる簡易的なアプリケーションサーバーで、
Silexを動かすデモ。
問題点
既存アプリケーションの実装
● StaticClassに変更可能な状態を持たせていたりしませんか?
● 既存のフレームワークはどうだ?(流石に大丈夫だとは思うが)
既存アプリケーションの実装
● そもそもStaticClassに状態を持たせていることがおかしい。
● こうなっていた場合、実装者は悔い改めましょう。
$_XXX系の変数
● PHPでサーバーを書く場合、CLIから起動することになるが、CLIから起動した場合
は$_XXXといった変数は自前で初期化しないといけない。
● プロセス内スレッドでノンブロッキング処理とかやったら不具合起きるんじゃない
か?
$_XXX系の変数
● headerを自前でパースするとかすればなんとかなる。
● ノンブロッキングモデルは厳しい…
CLI SAPIの問題
CLI SAPIの問題
● 既存のPHP実装でheader関数を利用していないケースはほぼ無い。
● PHPでアプリケーションサーバーを書いても、既存フレームワークなどで正確に動
作させることは難しい(´・ω・`)
現状のPHPでの落とし所
● ノンブロッキングは諦める。
● 謎のエクステンションをつかってheader関数を書き換える。
● 既存の実装を全部捨てて、アプリケーションサーバー用に全部自前で実装し直す。
ありがとうございました。
PSRにアプリケーションサーバー用インターフェースの話が欲しいね …

More Related Content

What's hot

zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
Yoshio Hanawa
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
Yoshio Hanawa
 
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうPHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろう
Taiji INOUE
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
Shogo Kawahara
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
 

What's hot (20)

PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
PHP7実環境ベンチ2016春
PHP7実環境ベンチ2016春PHP7実環境ベンチ2016春
PHP7実環境ベンチ2016春
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
 
PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうPHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろう
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
PHPerのための(不遇に負けない)Selenium入門 @ FuelPHP&CodeIgniter ユーザの集い #9
 
第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会
 
3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 

Viewers also liked

WordPressの構造を理解しよう
WordPressの構造を理解しようWordPressの構造を理解しよう
WordPressの構造を理解しよう
Kanako Kobayashi
 
Rails on rspec plactice
Rails on rspec placticeRails on rspec plactice
Rails on rspec plactice
k-motoyan
 
Greenhouse Service Network International oktober 2015 2
Greenhouse Service Network International oktober 2015 2Greenhouse Service Network International oktober 2015 2
Greenhouse Service Network International oktober 2015 2
Peter de Vreede
 
伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話
伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話
伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話
Tomonori Kawata
 
Writing php extensions in golang
Writing php extensions in golangWriting php extensions in golang
Writing php extensions in golang
do_aki
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
Enpel
 

Viewers also liked (20)

Dependency Injection and Pimple
Dependency Injection and PimpleDependency Injection and Pimple
Dependency Injection and Pimple
 
Big Master Data PHP BLT #1
Big Master Data PHP BLT #1Big Master Data PHP BLT #1
Big Master Data PHP BLT #1
 
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
iOSアプリのライブラリ依存管理ツールとして Swift Package Managerを使うのは まだしばらく先かなと思った話
 
Amazon Redshiftによるリアルタイム分析サービスの構築
Amazon Redshiftによるリアルタイム分析サービスの構築Amazon Redshiftによるリアルタイム分析サービスの構築
Amazon Redshiftによるリアルタイム分析サービスの構築
 
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャリアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
リアルタイム分析サービス『たべみる』を支える高可用性アーキテクチャ
 
勉強会資料①
勉強会資料①勉強会資料①
勉強会資料①
 
WordPressの構造を理解しよう
WordPressの構造を理解しようWordPressの構造を理解しよう
WordPressの構造を理解しよう
 
Current status of PSR - Phpblt1
Current status of PSR - Phpblt1Current status of PSR - Phpblt1
Current status of PSR - Phpblt1
 
Rails on rspec plactice
Rails on rspec placticeRails on rspec plactice
Rails on rspec plactice
 
Tugas 1
Tugas 1Tugas 1
Tugas 1
 
Greenhouse Service Network International oktober 2015 2
Greenhouse Service Network International oktober 2015 2Greenhouse Service Network International oktober 2015 2
Greenhouse Service Network International oktober 2015 2
 
最近のWeb業界のワークフローやインフラのお話とハンズオン
最近のWeb業界のワークフローやインフラのお話とハンズオン最近のWeb業界のワークフローやインフラのお話とハンズオン
最近のWeb業界のワークフローやインフラのお話とハンズオン
 
Thriving with Adult ADHD: The Science of Feeling Good!
Thriving with Adult ADHD: The Science of Feeling Good!Thriving with Adult ADHD: The Science of Feeling Good!
Thriving with Adult ADHD: The Science of Feeling Good!
 
伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話
伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話
伝統あるFTP直編集から結構頑張ってGit連携のインフラを整備したけど、結論としてはSVNがイイね!ってなった話
 
Writing php extensions in golang
Writing php extensions in golangWriting php extensions in golang
Writing php extensions in golang
 
Agile .NET Development with BDD and Continuous Integration
Agile .NET Development with BDD and Continuous IntegrationAgile .NET Development with BDD and Continuous Integration
Agile .NET Development with BDD and Continuous Integration
 
「楽しいことだけやる」のがプログラミングの勉強のコツ
「楽しいことだけやる」のがプログラミングの勉強のコツ「楽しいことだけやる」のがプログラミングの勉強のコツ
「楽しいことだけやる」のがプログラミングの勉強のコツ
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
 
1日30分で作れる個人サービスのススメ
1日30分で作れる個人サービスのススメ1日30分で作れる個人サービスのススメ
1日30分で作れる個人サービスのススメ
 
nginx入門
nginx入門nginx入門
nginx入門
 

Similar to Phpでアプリケーションサーバー

PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
 

Similar to Phpでアプリケーションサーバー (20)

今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ
 
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
 
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
 
App Engine と いまどきのPHP
App Engine と いまどきのPHPApp Engine と いまどきのPHP
App Engine と いまどきのPHP
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッションPHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのか
 
第1回勉強会
第1回勉強会第1回勉強会
第1回勉強会
 
2009 PHP初心者
2009 PHP初心者2009 PHP初心者
2009 PHP初心者
 
PHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special EditionPHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special Edition
 
【CodeCamp】PHP教科書サンプル
【CodeCamp】PHP教科書サンプル【CodeCamp】PHP教科書サンプル
【CodeCamp】PHP教科書サンプル
 
Lt資料 php7.0 張田浩明
Lt資料 php7.0 張田浩明Lt資料 php7.0 張田浩明
Lt資料 php7.0 張田浩明
 
Lt資料 php7.0 張田浩明
Lt資料 php7.0 張田浩明Lt資料 php7.0 張田浩明
Lt資料 php7.0 張田浩明
 
20111029 rubyon php
20111029 rubyon php20111029 rubyon php
20111029 rubyon php
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
20190608LT資料
20190608LT資料20190608LT資料
20190608LT資料
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
 
Quercus on gae公開版
Quercus on gae公開版Quercus on gae公開版
Quercus on gae公開版
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
anything-php-funcref-perl.el
anything-php-funcref-perl.elanything-php-funcref-perl.el
anything-php-funcref-perl.el
 

Recently uploaded

Recently uploaded (12)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Phpでアプリケーションサーバー