ホームページ  >  記事  >  PHPフレームワーク  >  Workerman 開発: UDP プロトコルに基づいてリアルタイム音声通話を実装する方法

Workerman 開発: UDP プロトコルに基づいてリアルタイム音声通話を実装する方法

王林
王林オリジナル
2023-11-07 10:48:37886ブラウズ

Workerman 開発: UDP プロトコルに基づいてリアルタイム音声通話を実装する方法

Workerman Development: UDP プロトコルに基づくリアルタイム音声通話

テクノロジーの継続的な進歩により、リアルタイム音声通話は生活に欠かせないものになりました。 TCP プロトコルに基づく従来の音声通話実装方法は、遅延が長く、帯域幅の使用量が多いなどの欠点があるため、現代の急速に発展する通信ニーズにはもはや適していません。したがって、現在私たちが通常使用しているのは、UDP プロトコルに基づくリアルタイム音声通話アプリケーションです。

Workerman は、ゲーム サーバー、リアルタイム通信サーバー、モノのインターネット サーバーなどの分野に適した、高性能アプリケーションを開発するための PHP フレームワークです。この記事では、Workerman を使用して UDP プロトコルに基づいたリアルタイム音声通話アプリケーションを開発する方法を紹介し、具体的なコード例を示します。

1. UDP プロトコルの利点

UDP プロトコルと TCP プロトコルの最大の違いは、データ パケットの到達可能性と順序が保証されないことです。したがって、UDP プロトコルには、TCP プロトコルに比べて次の利点があります。

  1. 効率: UDP プロトコルは到達性や順序を保証しないため、接続管理やデータ パケットなどの操作を実行する必要がありません。これは、より効率的に見えるようにするだけです。
  2. 低遅延: 同じネットワーク条件下では、UDP プロトコルの遅延は TCP プロトコルよりもはるかに低くなります。
  3. リアルタイム アプリケーションに最適: 音声通話、ライブ ビデオ ブロードキャストなど、UDP プロトコルに基づくリアルタイム アプリケーションは、より優れたユーザー エクスペリエンスを実現できます。

2. 実装手順

Workerman を使用して UDP プロトコルに基づくリアルタイム音声通話アプリケーションを開発するには、次の手順が必要です。 UDP サービス

Workerman を使用して UDP サービスを作成するコードは次のとおりです:

use WorkermanWorker;

$worker = new Worker('udp://0.0.0.0:60000');

上記のコードでは、$worker という名前の UDP サービスを作成し、そのリスニング ポート番号を 60000 に指定しました。

2. 受信したデータを処理する

Workerman を使用して受信したデータを処理するコードは次のとおりです:

$worker->onMessage = function ($connection, $data) {
    echo "收到客户端的数据:" . $data . "
";
};

上記のコードでは、提供されている onMessage コールバックを使用します。 Workerman 関数を使用すると、クライアントがサーバーにデータを送信すると、その関数が自動的にコールバックされ、受信したデータをこの関数内で処理できます。

3. クライアントにデータを送信する

Workerman を使用してクライアントにデータを送信するコードは次のとおりです:

$worker->onMessage = function ($connection, $data) {
    // 处理收到的数据
    // ......
    // 发送数据给客户端
    $connection->send("Hello Client!");
};

上記のコードでは、 $connection オブジェクトの send メソッド データをクライアントに送信します。

4. クライアント

クライアントは、サーバーに音声データを送信し、サーバーからデータを受信するアプリケーションです。 Workerman を使用してクライアントを開発するコードは次のとおりです。

use WorkermanConnectionAsyncUdpConnection;

$udp_connection = new AsyncUdpConnection('udp://127.0.0.1:60000');

// 当UDP连接建立成功时触发
$udp_connection->onConnect = function () use ($udp_connection) {
    // 发送数据给服务器
    $udp_connection->send('Hello Server!');
};

// 当收到服务器数据时触发
$udp_connection->onMessage = function($udp_connection, $data) use(&$callback)
{
    // 处理服务器数据
    // ......
};

$udp_connection->connect();

上記のコードでは、$udp_connection という名前の UDP 接続を作成し、そのターゲット IP とポート番号を 127.0.0.1:60000 として指定します。接続が成功した後、$udp_connection オブジェクトの onConnect コールバック関数を使用してサーバーにデータを送信し、onMessage コールバック関数を使用してサーバーから返されたデータを処理します。

3. 完全なコード例

次は、UDP プロトコルに基づく完全なリアルタイム音声通話アプリケーションのコード例です:

Server:

use WorkermanWorker;

// 创建一个UDP服务
$worker = new Worker('udp://0.0.0.0:60000');

// 处理客户端发送的数据
$worker->onMessage = function ($connection, $data) {
    // 处理收到的数据
    // ......
    // 发送数据给客户端
    $connection->send($data);
};

// 运行worker
Worker::runAll();

顧客側:

use WorkermanConnectionAsyncUdpConnection;

$udp_connection = new AsyncUdpConnection('udp://127.0.0.1:60000');

// 当UDP连接建立成功时触发
$udp_connection->onConnect = function () use ($udp_connection) {
    // 发送数据给服务器
    $udp_connection->send(file_get_contents('audio.wav'));
};

// 当收到服务器数据时触发
$udp_connection->onMessage = function($udp_connection, $data) use(&$callback)
{
    // 处理服务器数据
    // ......
    file_put_contents('audio.wav', $data);
};

$udp_connection->connect();

上記のコードでは、クライアントで file_get_contents 関数を使用してローカル オーディオ ファイルを読み取り、UDP 経由でサーバーに送信します。サーバー側では、クライアントから音声データを受け取った後、データを直接クライアントに返します。クライアントはデータを受信すると、そのデータをローカル ファイルに保存します。

4. 概要

この記事では、Workerman を使用して UDP プロトコルに基づいたリアルタイム音声通話アプリケーションを開発する方法を紹介し、具体的なコード例を示します。この記事では、UDP プロトコルの利点と、UDP プロトコルに基づいた実装手順について説明しましたので、リアルタイム音声通話アプリケーションを開発する開発者にとって役立つと思います。より良い実装やその他の質問がある場合は、コメント領域にメッセージを残してください。

以上がWorkerman 開発: UDP プロトコルに基づいてリアルタイム音声通話を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。