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

18

Click here to load reader

Upload: k-motoyan

Post on 15-Apr-2017

3.806 views

Category:

Technology


1 download

TRANSCRIPT

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

アプリケーションサーバーを作ろう

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

自己紹介

@motoyan_k

Haxeというプログラミング言語がお気に入りのプログラマ。

普段はRails書いてます。

僕にとってのPHPは戦友みたいなものです。

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

モチベーション

● PHP7の登場でPHP自身の速度が十分に早くなった。

● PHPのバックエンドの実装はapacheかphp-fpmぐらいしかなくちょっと寂しい現状。

● ReactPHPとかあるし、PHP単体でアプリケーションサーバーが書かれた実績はあ

る。

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

そうだ、

PHPでアプリケーションサーバーを書いてみよう!

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

PHPでもWEBサーバーは作れる

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

ノンブロッキングIOも出来る

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

プロセスもつくれるんです

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

PHPでアプリケーションサーバーを作る意義

● アプリケーションサーバーをPHPで書けばPHP書ける人がメンテナンス出来るよ

ね?

● apacheやphp-fpmに依存してたプロセス戦略がPHPコードで実現出来るようにな

る。

● ライブラリ化して、composerなどで配布することでアプリケーションサーバーの挿げ

替えが簡単になる。

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

DEMO複数のプロセスをスタンバイさせる簡易的なアプリケーションサーバーで、

Silexを動かすデモ。

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

問題点

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

既存アプリケーションの実装

● StaticClassに変更可能な状態を持たせていたりしませんか?

● 既存のフレームワークはどうだ?(流石に大丈夫だとは思うが)

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

既存アプリケーションの実装

● そもそもStaticClassに状態を持たせていることがおかしい。

● こうなっていた場合、実装者は悔い改めましょう。

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

$_XXX系の変数

● PHPでサーバーを書く場合、CLIから起動することになるが、CLIから起動した場合

は$_XXXといった変数は自前で初期化しないといけない。

● プロセス内スレッドでノンブロッキング処理とかやったら不具合起きるんじゃない

か?

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

$_XXX系の変数

● headerを自前でパースするとかすればなんとかなる。

● ノンブロッキングモデルは厳しい…

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

CLI SAPIの問題

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

CLI SAPIの問題

● 既存のPHP実装でheader関数を利用していないケースはほぼ無い。

● PHPでアプリケーションサーバーを書いても、既存フレームワークなどで正確に動

作させることは難しい(´・ω・`)

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

現状のPHPでの落とし所

● ノンブロッキングは諦める。

● 謎のエクステンションをつかってheader関数を書き換える。

● 既存の実装を全部捨てて、アプリケーションサーバー用に全部自前で実装し直す。

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

ありがとうございました。

PSRにアプリケーションサーバー用インターフェースの話が欲しいね …