PHP socket初探---涙ながらにlibevent(三)


原文住所:https://t.ti-node.com/thread/...
この时间はみんなに比べても见て、私は离职して、1つは家で怠けて本当に手を出すのがおっくうで、2つはやっと时间を书きたいと思ってすべてデータの构造とアルゴリズムのところに落ちました.
今日は振り返って、ここの文章を続けます.その言葉はどう言いますか.
「自分が選んだ課題は、涙を浮かべても打ち切らなければならない!」(図文は関係なく、詳細はこちらをクリック).
実は前のlibeventの文章の中で(『PHP socket初探---硬着頭皮継続libevent(二)』)、もしあなたが総括能力が良いならば、私たちがlibeventを利用して少なくとも2つのことを試みたことを観察することができます:
  • ミリ秒レベルタイマ
  • 信号傍受ツール
  • みんなコードphpなので、自分の言ったことを「サーバーを書いた」と言うのが好きです.そこで、今日の最初の例はlibeventを使って簡単なhttpサーバを構築することです.
      
      if( ( $connect_socket = socket_accept( $listen_socket ) ) != false){
        echo "      :".intval( $connect_socket ).PHP_EOL;
        $msg = "HTTP/1.0 200 OK\r
    Content-Length: 2\r
    \r
    Hi"; socket_write( $connect_socket, $msg, strlen( $msg ) ); socket_close( $connect_socket ); } }, $listen_socket ); $event->add(); $event_base->loop();

    コードをtestとして保存する.php、そしてphp.phpが動作します.もう1つの端末を開き、curlのGET方式でサーバーを要求します.効果は以下の通りです.
    これは非常に簡単で簡単なhttp demoではありません.完全なhttpサーバにとって、彼はまだ完全なhttpプロトコルの実現、マルチコアCPUの利用などに欠けています.これらは、後に続く文章の中に置いて、細分化し始めます.
    私たちがselectシステム呼び出しを使って乱暴なオンラインチャットルームを実現したことを覚えています.selectのようなアマチュアはチャットルームを混ぜる勇気があります.専門的なのは絶対に人を怒らせてはいけません.
    无数の専门?????????????????libeventへ!
    やれやれ、スタートコード:
     $conn_item ){
            if( $conn != $conn_item ){
              $msg = intval( $conn ).'  : '.$buffer;
              socket_write( $conn_item, $msg, strlen( $msg ) );
            }   
          }   
        }, $conn );
        $event->add();
        //       ,                 ,     ,       ,                    
        $event_arr[ intval( $conn ) ] = $event;
      }
    }, $fd );
    $event->add();
    $event_base->loop();

    コードをserverとして保存します.php、そしてphp server.phpを実行し、他の3つの端末を開いてtelnetを使用してチャットルームに接続し、実行効果は以下の通りです.
    ダイナミックマップを置いてみて、いいかどうか見てみましょう.自分で作ったgifはとても大きくて、帯域幅が足りないことを知りません.
    これまで、Libeventシリーズのほぼコア3本の斧を振り回しても、これらを終わらせると、これらのコードに出会ったとき、次のようにはならないはずです.