現在の位置: ホーム> 最新記事一覧> socket_accept() + socket_set_option():接続パラメーターを設定して、パフォーマンスを最適化します

socket_accept() + socket_set_option():接続パラメーターを設定して、パフォーマンスを最適化します

M66 2025-06-15

パフォーマンスチューニングは、PHPがソケットを使用してネットワークサービスを構築する場合に無視できないステップです。 socket_accept()は、クライアント接続を処理するための重要な関数であり、 socket_set_option()を使用してパラメーターを合理的に設定することで、接続の安定性と応答速度を大幅に最適化できます。この記事では、実用的な例を組み合わせて、これら2つの関数を使用して接続パラメーターを設定してパフォーマンスを向上させる方法を説明します。

1。socket_accept ()の役割

socket_accept()は、ソケットリスニングキューからの接続を受け入れるために使用されます。クライアントがサーバーが耳を傾けるポートに接続すると、この関数はクライアントと通信するための新しいソケットリソースを返します。

サンプルコード:

 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080);
socket_listen($socket);

while (true) {
    $client = socket_accept($socket);
    if ($client) {
        socket_write($client, "Welcome to m66.net server!\n");
        socket_close($client);
    }
}

上記の例では、サーバーはポート8080に耳を傾け、クライアントからの接続を受け入れます。通常は機能しますが、高い並行性では、そのようなコードは、デフォルトのパラメーター設定により、パフォーマンスのボトルネックまたはリソースの無駄を経験します。

2。Socket_set_option ()を使用して、接続パフォーマンスを最適化します

ソケットの動作をより適切に制御するために、 socket_set_option()を使用して、次のようないくつかの重要なパラメーターを設定できます。

  • so_reuseaddr :ソケットアドレスの再利用を許可します

  • so_keepalive :接続を避けるためにtcpキープアライブ検出を有効

  • so_rcvbuf and so_sndbuf :受信と送信バッファサイズを設定します

アドレスの再利用を設定します

socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

このコード行は、サーバーが再起動した直後にポートがバインドされないようにすることができ、サービスをすばやく復元するのに役立ちます。

キープアライブメカニズムを有効にします

socket_set_option($client, SOL_SOCKET, SO_KEEPALIVE, 1);

キープアライブメカニズムは、接続がまだ存在するかどうかを定期的に検出できます。これは、長い接続に特に重要です。切断された接続は、時間内にクリーンアップしてリソースを解放できます。

バッファのサイズを変更します

socket_set_option($client, SOL_SOCKET, SO_RCVBUF, 1024 * 64);
socket_set_option($client, SOL_SOCKET, SO_SNDBUF, 1024 * 64);

バッファーを適切に増やすと、大規模なデータ伝送の効率が向上する可能性がありますが、メモリ圧力を引き起こすには高すぎないように注意してください。

3.完全な例

接続パフォーマンスを最適化するために、 socket_accept()socket_set_option()を組み合わせて使用​​する完全な例を次に示します。

 $host = '0.0.0.0';
$port = 8080;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, $host, $port);
socket_listen($socket);

echo "Server started on m66.net:$port\n";

while (true) {
    $client = socket_accept($socket);
    if ($client === false) {
        continue;
    }

    // クライアント接続パラメーターを設定します
    socket_set_option($client, SOL_SOCKET, SO_KEEPALIVE, 1);
    socket_set_option($client, SOL_SOCKET, SO_RCVBUF, 1024 * 64);
    socket_set_option($client, SOL_SOCKET, SO_SNDBUF, 1024 * 64);

    $message = "Welcome to m66.net optimized socket server!\n";
    socket_write($client, $message, strlen($message));
    socket_close($client);
}

4。概要

socket_accept()およびsocket_set_option()を使用して、接続の確立と動作を制御するだけでなく、パフォーマンスを最適化し、並行性機能を改善することもできます。これは、高性能ネットワークサービスの構築の重要な部分です。開発プロセス中に、特定のアプリケーションシナリオに従ってさまざまなパラメーターを調整して、最良の結果を達成することをお勧めします。