Swoole は、PHP 言語をベースとした高性能ネットワーク通信フレームワークで、非同期、同時実行、イベント駆動などの機能を提供し、TCP、UDP、HTTP、WebSocket などをサポートしています。プロトコル。この記事では、具体的なコード例を示しながら、Swoole を使用して TCP リレー サーバーを実装する方法を検討します。
TCP リレー サーバーは、通常、ネットワーク上でデータを転送するために使用されます。たとえば、クライアント A が別のクライアント B にデータを送信したいと考えていますが、A と B は直接通信できません。この場合、TCP を使用できます。データを転送する中継サーバー。
TCP リレー サーバーを実装するには、次の点に注意する必要があります。
以下では、特定の例を使用して、使用方法を示します。 Swoole を使用して TCP リレー サーバーを実装します。
まず、各クライアント接続の情報を保存する配列を定義します:
$clients = [];
次に、Swoole TCP サーバー オブジェクトを作成し、関連するパラメーターを設定します:
$server = new swoole_server("0.0.0.0", 9501); $server->set([ 'worker_num' => 1, //worker进程数 'max_request' => 1000, //每个worker最多处理1000个请求 'dispatch_mode' => 2, //使用固定模式 'debug_mode' => 1, //调试模式 ]);
Whenサーバーが起動すると、接続イベントを処理するコールバック関数を登録します:
$server->on('connect', function ($server, $fd) { echo "Client: Connect. "; //将连接信息存入数组 $clients[$fd] = [ 'id' => $fd, 'remote_ip' => $server->getClientInfo($fd)['remote_ip'], 'remote_port' => $server->getClientInfo($fd)['remote_port'], 'target_fd' => 0 //默认为0 ]; });
クライアントがサーバーに接続すると、「クライアント: 接続します。」というメッセージが出力され、クライアントの接続情報がファイルに保存されます。配列。
次に、受信したデータを処理するコールバック関数を登録します:
$server->on('receive', function ($server, $fd, $from_id, $data) use (&$clients) { //如果还没有目标连接,则需要先选择一个 if (empty($clients[$fd]['target_fd'])) { foreach ($clients as $client) { if ($client['id'] != $fd && empty($client['target_fd'])) { $clients[$fd]['target_fd'] = $client['id']; $clients[$client['id']]['target_fd'] = $fd; break; } } } //将数据转发到目标连接 $server->send($clients[$fd]['target_fd'], $data); });
データ送信があった場合、データ内容を取得します。クライアントの接続情報に応じて、未使用のデータが取得されます。ターゲット接続を使用して、ターゲット接続を通じてデータを転送します。
最後に、接続切断イベントを処理するコールバック関数を登録します:
$server->on('close', function ($server, $fd) use (&$clients) { echo "Client: Close. "; //清理连接信息 if (!empty($clients[$fd]['target_fd'])) { $target_fd = $clients[$fd]['target_fd']; $clients[$target_fd]['target_fd'] = 0; } unset($clients[$fd]); });
クライアント接続が切断されると、「Client: Close.」というメッセージが出力され、接続をクリーンアップします。情報。
上記は、単純な TCP リレー サーバーの実装です。上記のコード例を通して、Swoole を使用して TCP リレー サーバーを実装することが非常に簡単であることがわかります。関連するパラメーターを定義し、コールバック関数とターゲット 各イベントに対応するロジックを記述するだけです。
以上がSwooleを使用してTCPリレーサーバーを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。