FuelPHP x Ratchet – - WebSocket Application - – FuelPHPでRatchetを使うには



FuelPHP x Ratchet – - WebSocket Application - – FuelPHPでRatchetを使うには

0 1


reveal-fuel-ratchet

"FuelPHP & CodeIgniter ユーザの集い (2013/10/12)" 用資料

On Github mp-php / reveal-fuel-ratchet

FuelPHP x Ratchet

- WebSocket Application -

FuelPHP & CodeIgniter ユーザの集い on October 12, 2013

Mamoru Otsuka (@madmamor)

Outline

About Me WebSocketとは WAMPとは WebSocket開発のハードル Ratchetとは FuelPHPでRatchetを使うには サンプル 商用環境ですべきこと

About Me

Name : Mamoru Otsuka WEB : http://madroom.net/ Twitter : @madmamor Blog : madroom project GitHub : @mp-php GitHub (Android) : @mp-android Android Apps : madroom project Location : Tama-Center, Roppongi

WebSocketとは

双方向通信を可能にする、ネットワーク用の通信規格 XMLHttpRequest(Ajax)の欠点を解決する技術として開発されているhttp://ja.wikipedia.org/wiki/WebSocket

Ajaxで双方向通信っぽいことを行おうとすると

  • 一定間隔でサーバにリクエスト(ポーリング)

    →通信毎にコネクションを確立する

    →WebSocketなら同じコネクションで何度も通信

    →若干のラグが発生

    →WebSocketなら即時

  • レスポンスをわざと遅らせて擬似的にプッシュ(Comet)

    →HTTPの接続が長引きサーバの負担となる

    →WebSocketなら専用プロトコルでコネクションを維持してサーバの負担を軽減できる

WAMPとは

  • WebSocket Application Messaging Protocolの略
  • WebSocketのサブプロトコル
  • http://wamp.ws/
  • PubSubとRPCの提供

PubSubとは

RPCとは

  • Remote Procedure Callの略
  • 遠隔地(Remote)の一連の処理(Procedure)を呼び出す(Call)
  • 例: チャットルームのメンバ一覧を取得(パラメータはルームID)

WebSocket開発のハードル

PHPでの開発を主としていると

  • Node.js + Socket.IOやPlay Frameworkで開発しようとすると

    →WebSocket以外の学習コスト

    →使用言語変更のリスク(業務)

Node.js + Socket.IOやPlay FrameworkをPHPと組み合わせようとすると

Ratchetとは

フレームワークに組み込むと

  • フレームワークの機能(クラス/メソッド)が使える
  • セッションの共有も比較的容易

FuelPHPに組み込んでみました(Package化)

以降「Ratchetパッケージ」と呼びます

FuelPHPでRatchetを使うには

ZeroMQのインストール

  • http://zeromq.org/
  • メッセージングライブラリ
  • Ratchetを動かすだけなら必須ではない
  • Ratchetパッケージでは必須
  • FuelPHPのTask等からメッセージを送信する際に使用
  • 各OSへのインストール方法 Mac / Linux / Windows

Ratchetパッケージのインストール

Mac(MAMP)ZeroMQのインストール 1/2

libzmqのインストール

					# ダウンロード
					$ cd xxx # 任意のディレクトリ
					$ git clone git://github.com/zeromq/libzmq.git

					# インストール
					$ cd libzmq/
					$ sudo ./autogen.sh
					$ ./configure
					$ make
					$ sudo make install
				

libtoolやautoconfのnot foundエラーが出たら、以下の手順等でインストールして下さい。

XcodeのGUIからCommand Line Toolsをインストール Mac Portsからlibtool、autoconf、automakeをインストール

Mac(MAMP)ZeroMQのインストール 2/2

php-zmqのインストール

					# php.hのエラーを回避するため、公式からPHPをDL
					$ cd xxx # 任意のディレクトリ
					$ wget http://www.php.net/get/php-5.4.20.tar.bz2/from/jp1.php.net/mirror -O php-5.4.20.tar.bz2
					$ tar zxf php-5.4.20.tar.bz2
					$ cd php-5.4.20
					$ ./configure
					$ cd ../
					$ mkdir /Applications/MAMP/bin/php/php5.4.4/include
					$ mv php-5.4.20 /Applications/MAMP/bin/php/php5.4.4/include/php

					# php-zmqのインストール
					$ cd xxx # 任意のディレクトリ
					$ git clone git://github.com/mkoppanen/php-zmq.git
					$ cd php-zmq/
					$ phpize
					$ ./configure # エラーが出たので、Mac Portsでre2cとpkgconfigのバージョンを最新にしました。
					$ make
					$ sudo make install
				

php.iniの編集

					# 以下を追記する。"php -i | grep 'Configuration File'" で表示されるphp.iniも忘れずに。
					extension=zmq.so
				

Linux(Ubuntu)にZeroMQをインストール

libzmqとphp-zmq(とpaco)のインストール

					$ sudo apt-get install -y libzmq-dev re2c pkg-config paco # pacoは任意
					$ cd xxx # 任意のディレクトリ
					$ git clone git://github.com/mkoppanen/php-zmq.git
					$ cd php-zmq/
					$ phpize
					$ ./configure
					$ make
					$ sudo paco -D make install
				

php.iniの編集はMacと同様

Windows(XAMPP)にZeroMQをインストール

DLLのインストール

php.iniの編集

					# 以下を追記する。"php -i | grep 'Configuration File'" で表示されるphp.iniも忘れずに。
					extension=php_zmq.dll
				

Ratchetパッケージのインストール

インストール

					# composer.jsonに以下を追記
					"mp-php/fuel-packages-ratchet": "dev-master"

					# インストール
					$ php composer.phar install # 二回目以降はupdate
				
app/config/config.php でRatchetパッケージを有効化
					'always_load' => array('packages' => array(
						'ratchet',
						...
				
packages/ratchet/config/ratchet.php を app/config/ 下にコピー
					# HELPの表示
					$ php oil r ratchet:help
				

サンプル

ファイルの作成

起動

				$ php oil r ratchet:ws My_Ratchet_Ws 1337
			

商用環境ですべきこと

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