Help us understand the problem. What is going on with this article?

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によると、わくわくする日本語訳になりますね!

ytake
著: Laravelリファレンス(インプレス) Laravelエキスパート養成読本(技術評論社) PHPフレームワーク Laravel Webアプリケーション開発 バージョン 5.5 LTS対応(ソシム)
https://blog.ytake.jp.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away