phpでsocket.ioを使うときのインストール方法をメモ
はじめに
しょっちゅうやるわけではないが、やる機会がそこそこ増えてきたので手順を自分用にメモしておく。ちなみに今fuelphpを使ってるのでそれに合わせて話を進めます
socket.ioのインストール
node.jsはインストールされていてnpmコマンドもすでに使える前提です
mkdir nodejs # nodejs用のディレクトリをつくる cd nodejs npm install socket.io@0.9 # socket.ioバージョン0.9をインストール
ElephantIOのインストール
phpからsocket.ioへemitするために使用する。ちなみにemitとはphpからsocket.ioへリクエストを送ることを言います。逆に受信することをonと言います
詳しくはこちらを確認してみてください
cd ~/tmp # ElephantIOをダウンロードするための作業ディレクトリ wget --no-check-certificate https://github.com/Wisembly/elephant.io/archive/master.zip # ElepahtnIOをダウンロード unzip master.zip # 解凍(elephant.io-masterというディレクトリができる) mv ./elephant.io-master/src pathto_fuelphp/fuel/app/vendor/ElephantIO # 必要なファイルをfuelphpのvendorディレクトリ以下へ配置
動作確認用のスクリプトを準備
socket.ioではサーバ用スクリプトを
Elephant.ioではクライアント用スクリプトを
それぞれ準備します
socket.ioサーバ
サーバスクリプトを準備。ちなみに以下でポート番号3000で待ち受けるサーバスクリプトとなります
nodejs/chat.js(socket.io側)
var io = require('socket.io').listen(3000); io.sockets.on('connection',function(socket) { console.log(socket); });
で、socket.ioサーバを起動
% node chat.js info - socket.io started ・・・ サーバへのアクセスなどがあるとここに情報が出力されます
ブラウザから以下へアクセスしてサーバが動いている事を確認する。とりあえずnot foundとか出てなければサーバが動いていることを確認できるのでokです
http://example.com:3000/socket.io/socket.io.js
Elephant.ioクライアント
クライアントスクリプトを準備。上記で作ったサーバへアクセスしてみるスクリプトです
fuel/app/tasks/emit.php
<?php namespace Fuel\Tasks; use ElephantIO\Client, ElephantIO\Engine\SocketIO\Version0X; class Emit { public static function run() { //ライブラリ読み込み(工夫がなくてすみません) require(APPPATH.'vendor/ElephantIO/AbstractPayload.php'); require(APPPATH.'vendor/ElephantIO/Client.php'); require(APPPATH.'vendor/ElephantIO/EngineInterface.php'); require(APPPATH.'vendor/ElephantIO/Engine/AbstractSocketIO.php'); require(APPPATH.'vendor/ElephantIO/Engine/SocketIO/Version0X.php'); require(APPPATH.'vendor/ElephantIO/Engine/SocketIO/Session.php'); require(APPPATH.'vendor/ElephantIO/Exception/MalformedUrlException.php'); require(APPPATH.'vendor/ElephantIO/Exception/SocketException.php'); require(APPPATH.'vendor/ElephantIO/Exception/UnsupportedActionException.php'); require(APPPATH.'vendor/ElephantIO/Payload/Decoder.php'); require(APPPATH.'vendor/ElephantIO/Payload/Encoder.php'); $client = new Client(new Version0X("http://example.com:3000")); $client->initialize(); $client->emit('action', ['foo' => 'bar']); $client->close(); } }
で、上記スクリプトを実行
php oil refine emit # fuelphpでのコマンドライン起動の記述になります
するとsocket.ioサーバを起動したコンソールにログがずらずらと出力されるかと思われます
とりあえずここまでできればサーバとクライアントともに準備が完了です
以上です
※追記
さすがに以下のようなファイルを用意したほうが楽ですね
vendor/ElephantIO/Autoloader.php
<?php require(APPPATH.'vendor/ElephantIO/AbstractPayload.php'); require(APPPATH.'vendor/ElephantIO/Client.php'); require(APPPATH.'vendor/ElephantIO/EngineInterface.php'); require(APPPATH.'vendor/ElephantIO/Engine/AbstractSocketIO.php'); require(APPPATH.'vendor/ElephantIO/Engine/SocketIO/Version0X.php'); require(APPPATH.'vendor/ElephantIO/Engine/SocketIO/Session.php'); require(APPPATH.'vendor/ElephantIO/Exception/MalformedUrlException.php'); require(APPPATH.'vendor/ElephantIO/Exception/SocketException.php'); require(APPPATH.'vendor/ElephantIO/Exception/UnsupportedActionException.php'); require(APPPATH.'vendor/ElephantIO/Payload/Decoder.php'); require(APPPATH.'vendor/ElephantIO/Payload/Encoder.php');
呼出し側
<?php namespace Fuel\Tasks; // ElephantIO use ElephantIO\Client, ElephantIO\Engine\SocketIO\Version0X; require_once APPPATH . "vendor/ElephantIO/Autoloader.php"; class Emit { public static function run() { // ElephantIO $client = new Client(new Version0X("http://example.com:3000")); $client->initialize(); $client->emit('action', ['foo' => 'bar']); $client->close(); } }