phpでアプリケーションサーバー
TRANSCRIPT
アプリケーションサーバーを作ろう
自己紹介
@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にアプリケーションサーバー用インターフェースの話が欲しいね …