phpはイベント駆動に基づくネットワークプログラミングをどのように実現するか
2002 ワード
php
イベント駆動ベースのネットワークプログラミングをどのように実現するかシーン
次のすべてのコードが単純な小さなdemo生産環境でのみ使用されるために、コードの厳密性を考慮する必要があることを示します.
例1
単純にデータを受け入れて返す
");
??>
$ telnet 0.0.0.0 8000
Trying 0.0.0.0...
Connected to 0.0.0.0.
Escape character is '^]'.
hello //
hello //
Connection closed by foreign host.
上記の例では、サービス側はクライアントデータを受信すると同じ情報を返し、接続が閉じられます.接続を維持できません.?の
例2
$socket = stream_socket_server("tcp://0.0.0.0:8000");
while($conn = stream_socket_accept($socket)){
while($info = fread($conn,1024)){
fwrite($conn,$info);
}
}
上記の例では、データを簡単に受け入れて実行を維持する欠点は、同時に1つの接続しか処理できないことです!!!
例3
$socket = stream_socket_server("tcp://0.0.0.0:8000");
while($conn = stream_socket_accept($socket)){
if(pcntl_fork()){
while($info = fread($conn,1024)){
fwrite($conn,$info);
}
}
}
ここでは実際にforkはn個のリクエストを処理するn個のサブプロセスを行う.しかしforkプロセスを使用する方法はよくなく、よくありません.もし10万個の接続があれば、10万個のプロセスが必要ではないでしょうか??oh,no!!
例4
libeventの実現に基づいて、完璧!!!
0){
fwrite($conn,$info);
}
});
event_base_set($event,$base);
event_add($event);
$events[] = $event;
});
event_base_set($event,$base);
event_add($event);
event_base_loop($base);