Posted at

laravel4 websocket実装で注意するポイント

More than 5 years have passed since last update.

laravel4に限らない話ですが、websocket関連の実装を行うときに

一番はまりやすい問題がロングポーリングではないでしょうか。

websocketを使って何かを実装する場合は、Redisはほぼ必須なのではないかと思いますが、

環境によってはRedisが使えなかったり(物理的に使えないサーバなんてあるんですかね?)

企業にお勤めの方は導入そのものがされていないので使えない!って方も居るかもしれません。

その場合は既存のDBを使用したりすると思いますが、

websocketはリアルタイムでイベントを拾っていくので、

php的には終了させるまで無限ループになっている中で処理を実装する、

とイメージしてみるといいかもしれません。

つまりどういう事かと言いますと、

Databaseを利用する場合は、明確に接続を終了させなければDBが1クエリーずつwaitとなって溜まるので、

あっという間に Too many connections になります。

ここでlaravel4で実際に実装していくと気になる点が1つ

disconnect

公式リファレンスにもtoo manyでたらdisconnectしましょう、とあります。

websocketはループで実装するので、disconnectを記載しますが、

実はQueryBuilderだとsleepになって残る様です。

ですのでシンプルなSQLでここは一つ

DB::connection('foo')->select('select * from users where id = ?', array(1));

とします。

modelをwebsocket関連でまとめているのであれば、

public function __destruct()

{
DB::disconnect('foo');
}

関係ありませんがweblioによると、わくわくする日本語訳になりますね!