WebSocketサーバーを上げる

多くの人が、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



  1. <?php
  2. //エラー表示をオンにします
  3. error_reporting(E_ALL);
  4. ini_set( 'display_errors''1' );
  5. 配列を返す
  6. 'mod-websocketserver-enable' => 1// Webソケットサーバーをオンにする
  7. 'mod-websocketserver-listen' => 'tcp://0.0.0.0'、// すべてのIPをリッスンする
  8. 'mod-websocketserver-listenport' => 8047//他のWebサーバーと競合しないように、80以外の何かにハングアップする
  9. 'max-requests' => 1000//リクエストの最大数
  10. 'max-idle' => 0//最大アイドル時間
  11. 'user' => 'www'//ユーザー
  12. 'group' => 'www'//およびデーモンが起動するグループ
  13. 'min-spare-workers' => 5
  14. 'max-spare-workers' => 20
  15. 'start-workers' => 1
  16. 'max-workers' => 50
  17. 'min-workers' => 1
  18. 「パス」 => dirname( __FILE__ )。 '/appResolver.php'
  19. );
  20. ?>


Webソケットリクエストハンドラーの例を作成します。



$ path / applications / WebSoketWorker.php

Copy Source | Copy HTML



  1. <?php
  2. 新しい WebSocketWorkerを返します。
  3. / ** <br/> * WebSocketハンドラー <br/> * <br/> * /
  4. クラス WebSocketWorker AppInstanceを拡張します{
  5. / ** <br/> * WebSocketサーバー <br/> * @var WebSocketServer <br/> * /
  6. パブリック $ ws ;
  7. / ** <br/> *ハンドラーの初期化 <br/> * /
  8. パブリック関数 onReady(){
  9. $ this- > ws = Daemon :: $ appResolver- > getInstanceByAppName( 'WebSocketServer' );
  10. if$ this-> ws){
  11. $ this-> ws-> routes [ 'myRoute' ] = array$ this'openSession' );
  12. }
  13. }
  14. / ** <br/> *新しいセッションを開く <br/> * @param $ client <br/> * /
  15. パブリック関数 openSession( $ client ){
  16. 新しい WebSocketWorkerSession( $ client )を返し ます
  17. }
  18. }
  19. / ** <br/> * Websocketセッション <br/> * <br/> * /
  20. クラス WebSocketWorkerSession {
  21. パブリック $クライアント ;
  22. / ** <br/> *初期化 <br/> * @param $ client <br/> * /
  23. パブリック関数 __construct( $ client ){
  24. デーモン::ログ( 'connected' );
  25. $ this- > client = $ client ;
  26. }
  27. / ** <br/> *メッセージの受信 <br/> * @param $ data- メッセージ本文 <br/> * @param $ type- メッセージタイプ <br/> * /
  28. パブリック関数 onFrame( $ data$ type ){
  29. デーモン::ログ( $データ );
  30. if$ data === 'ping' ){
  31. $ this-> client-> sendFrame( 'pong' );
  32. }
  33. }
  34. / ** <br/> *セッションの終了 <br/> * /
  35. パブリック関数 onFinish(){
  36. }
  37. }
  38. ?>




出来上がり! Webソケットサーバーがインストールされました!



4.テスト



テストのために、次の内容のファイルを作成します。



Copy Source | Copy HTML



  1. <script type = "text / javascript" >
  2. <!-
  3. if (ウィンドウ内の 「WebSocket」 ){
  4. var ws = new WebSocket( "ws://127.0.0.1:8047 / myRoute" );
  5. ws.onopen = function (){
  6. // Webソケットが接続されました。 send()メソッドを使用してデータを送信できます。
  7. ws.send( "ping" );
  8. };
  9. //ブラウザがWebソケットを介してデータを受信するたび
  10. ws.onmessage = function (evt){
  11. alert( '受信メッセージ:' + evt.data);
  12. };
  13. ws.onclose = function (){
  14. // websocketは閉じられています。
  15. };
  16. } else {
  17. // WebSocketをサポートしていないブラウザの場合。
  18. アラート( 「お使いのブラウザーはwebsocketをサポートしていません」 );
  19. }
  20. //->
  21. </ script>




接続が成功すると、「ポン」メッセージが表示されます。



Chrome以外のブラウザでサポートするには、フラッシュを使用してWebソケットをエミュレートするweb-socket-jsライブラリを使用します。



All Articles