多くの人が、HTTPプロトコルの拡張における革命、つまり
Google Chromium開発者による
WebSocketテクノロジーの実装について既に聞いています。 この記事では、この獣を飼いならす方法
-phpDaemon非同期フレームワークでWebSocketサーバーをインストールおよび構成する方法について説明します。
インストールには、pcntl、shmop、およびソケットをサポートする
PHP5 CLI> = 5.3が必要
です 。
1.ダウンロード
リポジトリから最新のphpDaemonを取得します。
$ svn checkout http://phpdaemon.googlecode.com/svn/trunk $path/
$ pathはphpDaemonがインストールされているパスに置き換える必要があることに注意してください
2.インストール
起動権を設定する
$ chmod +x $path/bin/phpdaemon
libeventライブラリをインストールする
$ pecl install libevent
デーモンをphpdコマンドにバインドする
$ ln -s $path/bin/phpdaemon /usr/bin/phpd
3.セットアップ
ファイル$ path / conf / phpdaemon.conf.phpを構成します
Copy Source | Copy HTML
- <?php
- //エラー表示をオンにします
- error_reporting(E_ALL);
- ini_set( 'display_errors' 、 '1' );
- 配列を返す (
- 'mod-websocketserver-enable' => 1 、 // Webソケットサーバーをオンにする
- 'mod-websocketserver-listen' => 'tcp://0.0.0.0'、// すべてのIPをリッスンする
- 'mod-websocketserver-listenport' => 8047 、 //他のWebサーバーと競合しないように、80以外の何かにハングアップする
- 'max-requests' => 1000 、 //リクエストの最大数
- 'max-idle' => 0 、 //最大アイドル時間
- 'user' => 'www' 、 //ユーザー
- 'group' => 'www' 、 //およびデーモンが起動するグループ
- 'min-spare-workers' => 5 、
- 'max-spare-workers' => 20 、
- 'start-workers' => 1 、
- 'max-workers' => 50 、
- 'min-workers' => 1 、
- 「パス」 => dirname( __FILE__ )。 '/appResolver.php'
- );
- ?>
Webソケットリクエストハンドラーの例を作成します。
$ path / applications / WebSoketWorker.php
Copy Source | Copy HTML
- <?php
- 新しい WebSocketWorkerを返します。
- / ** <br/> * WebSocketハンドラー <br/> * <br/> * /
- クラス WebSocketWorker は AppInstanceを拡張します{
- / ** <br/> * WebSocketサーバー <br/> * @var WebSocketServer <br/> * /
- パブリック $ ws ;
- / ** <br/> *ハンドラーの初期化 <br/> * /
- パブリック関数 onReady(){
- $ this- > ws = Daemon :: $ appResolver- > getInstanceByAppName( 'WebSocketServer' );
- if ( $ this-> ws){
- $ this-> ws-> routes [ 'myRoute' ] = array ( $ this 、 'openSession' );
- }
- }
- / ** <br/> *新しいセッションを開く <br/> * @param $ client <br/> * /
- パブリック関数 openSession( $ client ){
- 新しい WebSocketWorkerSession( $ client )を返し ます 。
- }
- }
- / ** <br/> * Websocketセッション <br/> * <br/> * /
- クラス WebSocketWorkerSession {
- パブリック $クライアント ;
- / ** <br/> *初期化 <br/> * @param $ client <br/> * /
- パブリック関数 __construct( $ client ){
- デーモン::ログ( 'connected' );
- $ this- > client = $ client ;
- }
- / ** <br/> *メッセージの受信 <br/> * @param $ data- メッセージ本文 <br/> * @param $ type- メッセージタイプ <br/> * /
- パブリック関数 onFrame( $ data 、 $ type ){
- デーモン::ログ( $データ );
- if ( $ data === 'ping' ){
- $ this-> client-> sendFrame( 'pong' );
- }
- }
- / ** <br/> *セッションの終了 <br/> * /
- パブリック関数 onFinish(){
- }
- }
- ?>
出来上がり! Webソケットサーバーがインストールされました!
4.テスト
テストのために、次の内容のファイルを作成します。
Copy Source | Copy HTML
- <script type = "text / javascript" >
- <!-
- if (ウィンドウ内の 「WebSocket」 ){
- var ws = new WebSocket( "ws://127.0.0.1:8047 / myRoute" );
- ws.onopen = function (){
- // Webソケットが接続されました。 send()メソッドを使用してデータを送信できます。
- ws.send( "ping" );
- };
- //ブラウザがWebソケットを介してデータを受信するたび
- ws.onmessage = function (evt){
- alert( '受信メッセージ:' + evt.data);
- };
- ws.onclose = function (){
- // websocketは閉じられています。
- };
- } else {
- // WebSocketをサポートしていないブラウザの場合。
- アラート( 「お使いのブラウザーはwebsocketをサポートしていません」 );
- }
- //->
- </ script>
接続が成功すると、「ポン」メッセージが表示されます。
Chrome以外のブラウザでサポートするには、フラッシュを使用してWebソケットをエミュレートする
web-socket-jsライブラリを使用します。