非同期サービスSwooleを構築するためにPHPを使用して、

プロジェクトのPHPで使用されるが、理由は、長い時間のかかる作業で、フロントエンドの提出後、あなたはサーバーの非同期応答を必要としています。

非同期サーバーのようにMQ、fsocket、Swooleとを含むプログラム、さまざまな。(推奨学習:swooleビデオチュートリアル)

Swoole純粋なC言語を使用して、非同期マルチスレッドサーバーのPHP言語、非同期、TCPを提供 / UDPネットワーククライアント、非同期のMySQL、非同期のRedis、データベース接続プール、AsyncTask、メッセージキュー、ミリ秒タイマーを非同期のファイルの読み取りと書き込み、非同期DNSクエリー。Swooleは、HTTP / WebSocketのサーバー/クライアント、HTTP2を建てた。0サーバ側。

最も重要なのは、PHP言語のための完全なサポート。したがってSwooleは、非同期サーバー非同期応答、プッシュ、作業スケジュールされたタスクのシリーズを提供を構築するために使用されます。

Swooleは、コンパイルとインストールの方法により、C言語で記述されています。インストールの依存関係があります:


 
PHP -5.3.10 以降

のgcc -4.4 以降

メイク

autoconfの

PCREは(CentOSのシステムがコマンドを実行することができます:yumのPCREをインストールする - develの)インストール:


 
は、phpize コマンドが存在しない場合は、前に追加してくださいPHPの実際のパス
 
./ のconfigure 

メイク

sudoのメイクは、インストール

後にコンパイルされ、必要のPHPiniファイルは、拡張の追加

拡張を = swoole。SO サーバ・



クラスのサーバー{ 

    プライベート $ Servのを

    公共の 機能__construct(){ 

        $この - > Servの= 新しい新 swoole_server( "0.0.0.0"、 9501 ); 

        $この - > serv->セット(配列

            // 'worker_num' => 1、CPUサーバの1~4倍の正常セット//数
 
            。「デーモン化する'=> 1、   // デーモンを実行
 
            ' max_request '=> 10000、

            ' task_worker_num「=> 1、   // プロセスのタスクの数
 
            」  task_ipc_mode "=> 3、配列$この、 'onReceive' )); $この









        

        - > serv->( 'タスク'、上の配列$この、 'onTask' )); 

        これを$ - > serv->上( '完了'、配列$これを、 'onFinish' )); 

        これを$ - > serv-> ()を開始。

    } 

    パブリック 関数 onReceive(swoole_server $ SERV$ FD$ from_id$データ){ 

        // 放入任务队列、开始执行

        $ TASK_ID = $ SERV - >タスク($データ)。

    } 

    公共の 機能 onTask($ SERV$ TASK_ID$ from_id$データ){ 

      // 做一些事情

    } 客户端



クラスのクライアント{ 

    プライベート $クライアント$ IP$ポート$ paramsは

    パブリック 関数 __construct($ IP$ポート$ paramsは

    { 

        $この - > IP = $ IP ; 

        この$ >ポート= - $ポートを

        これは、$ >のparams = - $のparams ; 

        これを$ - >クライアント= 新しい swoole_client(SWOOLE_SOCK_TCP、SWOOLE_SOCK_ASYNC); 

        $この - >クライアント- > SET(配列

             'open_length_check' => trueに

            'package_length_type' => 'N'、

            'package_length_offset' => 0、       // Nバイトのパケット長の値です
 
            ' package_body_offsetは'=> 4、       // バイトは長さを計算し始める
 
            ' => 2,000,000、package_max_length '   // プロトコルの最大長

        )); 

        // イベントコールバック関数を設定

        $この - >クライアント- > ON('接続」を配列$この 'のonConnect' )); 

        $この - >クライアント- > ON( '受信'、配列$この'onReceive' )); 

        これを$ - >クライアント- >上の(、 '閉じる' 配列$これは、 'OnCloseの' )); 

        これを$ - >クライアント- >上の( 'エラー'、配列$この、 'のonError' )); 

        // 发起网络连接

        $この - >クライアント- >(接続$ IP$ポート、3 ); 

    } 

    パブリック 関数 onReceive($ CLI$データ){ 

        エコー "受付:"。$データ"\ n"は


     

        $データ = パック( 'N'、strlenを$データ))。$データ; 

        $ CLI - >送信($データ)。

        $ CLI - > 近いです(); 

    } 

    パブリック 関数は、(OnCloseの$ CLI 

    { 

        エコー "接続近い\ n"を

    } 

    パブリック 関数のonError()

    { 

        エコー "接続に失敗しました\ n" 

    } 

}

 

おすすめ

転載: www.cnblogs.com/zzz2000/p/12639269.html