LoginSignup
0
0

More than 3 years have passed since last update.

PHP Swoole学習メモ書き

Last updated at Posted at 2019-12-04

PHPに非同期処理を提供してくれるSwooleプラグインについての学習メモ。
主に自分向けだけど、誰かの役に立つかもしれないので公開しておく。

About Swoole

PHPプラグイン。Peclで入れる模様。
いろんなモジュールがある。 https://www.swoole.co.uk/docs/module
TCP, UDP, UnixSocket, HTTP, WebSocket, Redisなど。 Clientも提供している。 Http/2 Clientもあるのか。
Linux Process Manager, Async File IO, etcなども。

MySQL, Redis Clientもあるな。 mysqlnd, mysqliの置き換えとして動くらしいから、 PHP -> C -> MySQL の全部を担当してくれるのか。

Install

Pecl, はmacOSだけになったらしい。Source落として自分でビルドしろと…
試したいだけならDockerfileのサンプルが用意されてるっぽい。Docker Hubに上がってないのかな?
https://www.swoole.co.uk/docs/get-started/try-docker

Server

調べることがあったら書く。
今のところphp-fpmの置き換えをしたいとは思っていないので後回し。

EventLoop

https://www.swoole.co.uk/docs/modules/swoole-event-loop
イベント駆動の処理を書けるのかな?サンプルだとSocket接続してstream処理のようなことをしてるように見える。

KafkaみたいなメッセージングツールのSubscriberをPHPで書きやすくなる…?

Coroutine

どこかのバージョンからSwooleパッケージから切り出されたっぽい。

GoのChannel相当のものもあって、ネット上のサンプルコードだとこれをよく見る気がする。 go() で非同期処理が開始されたりdefer関数を呼んでたりでだいぶGoを意識してそう。
と思ったら go() + Swoole\Event::wait() のパターンはdeprecatedになっている。Coroutine\runで置き換えられたのかな。
この辺がCoroutineとして切り出されたからこっち使ってね、的なことなのかな。
しかし4.4.0-alpha版で試したらCoroutine\Runが無いと言われてしまった。サンプルが壊れてんのかな。

所感

Serverとか TCP/UDP, WebSocket接続, Stream, プロセスやメモリ管理のようなPHPが隠蔽してくれるおかげで触らなくて(理解しなくて)済んでる低レイヤーを露出させてますね。ハイパフォーマンスなアプリケーションを作ろうと思うとこの辺の知識がどうしても必要になるということをPHPエンジニアに突きつける感じでいいですね。そんなにパフォーマンスが必要なものにPHPを使うのかというのはまぁそれはそれで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0