Développé par Workerman : appels vocaux en temps réel basés sur le protocole UDP
Avec les progrès continus de la technologie, les appels vocaux en temps réel sont devenus un élément indispensable de la vie. La méthode traditionnelle de mise en œuvre des appels vocaux basée sur le protocole TCP n'est plus adaptée aux besoins de communication modernes et en évolution rapide en raison de ses inconvénients tels qu'une latence élevée et une utilisation importante de la bande passante. Par conséquent, nous utilisons habituellement désormais des applications d’appel vocal en temps réel basées sur le protocole UDP.
Workerman est un framework PHP permettant de développer des applications hautes performances, adapté aux serveurs de jeux, aux serveurs de communication en temps réel, aux serveurs Internet des objets et à d'autres domaines. Cet article explique comment utiliser Workerman pour développer une application d'appel vocal en temps réel basée sur le protocole UDP et fournit des exemples de code spécifiques.
1. Avantages du protocole UDP
La plus grande différence entre le protocole UDP et le protocole TCP est qu'il ne garantit pas l'accessibilité et l'ordre des paquets de données. Par conséquent, le protocole UDP présente les avantages suivants par rapport au protocole TCP :
2. Étapes de mise en œuvre
Pour utiliser Workerman pour développer une application d'appel vocal en temps réel basée sur le protocole UDP, vous devez suivre les étapes suivantes :
1. Créer un service UDP
Le code à utiliser. Workerman pour créer un service UDP est le suivant :
use WorkermanWorker; $worker = new Worker('udp://0.0.0.0:60000');
Dans le code ci-dessus, nous avons créé un service UDP nommé $worker et spécifié son numéro de port d'écoute comme 60000.
2. Traiter les données reçues
Le code permettant d'utiliser Workerman pour traiter les données reçues est le suivant :
$worker->onMessage = function ($connection, $data) { echo "收到客户端的数据:" . $data . " "; };
Dans le code ci-dessus, nous utilisons la fonction de rappel onMessage fournie par Workerman lorsqu'un client envoie des données au serveur. , Cette fonction sera automatiquement rappelée, et nous pourrons ensuite traiter les données reçues dans cette fonction.
3. Envoyer des données au client
Le code pour utiliser Workerman pour envoyer des données au client est le suivant :
$worker->onMessage = function ($connection, $data) { // 处理收到的数据 // ...... // 发送数据给客户端 $connection->send("Hello Client!"); };
Dans le code ci-dessus, nous pouvons utiliser la méthode d'envoi de l'objet $connection pour envoyer des données au client. client.
4. Client
Le client est l'application qui envoie des données sonores au serveur et reçoit des données du serveur. Le code pour développer le client à l'aide de Workerman est le suivant :
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();
Dans le code ci-dessus, nous créons une connexion UDP nommée $udp_connection et spécifions son IP cible et son numéro de port comme 127.0.0.1:60000. Nous utilisons la fonction de rappel onConnect de l'objet $udp_connection pour envoyer des données au serveur une fois la connexion réussie, et utilisons la fonction de rappel onMessage pour traiter les données renvoyées par le serveur.
3. Exemple de code complet
Ce qui suit est un exemple de code complet d'application d'appel vocal en temps réel basé sur le protocole UDP :
Serveur :
use WorkermanWorker; // 创建一个UDP服务 $worker = new Worker('udp://0.0.0.0:60000'); // 处理客户端发送的数据 $worker->onMessage = function ($connection, $data) { // 处理收到的数据 // ...... // 发送数据给客户端 $connection->send($data); }; // 运行worker Worker::runAll();
Client :
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();
Dans le code ci-dessus, nous l'avons utilisé sur le client. La fonction file_get_contents lit les fichiers audio locaux et les envoie au serveur via UDP. Côté serveur, après avoir reçu les données audio du client, nous renvoyons directement les données au client. Une fois que le client reçoit les données, il les stocke dans un fichier local.
4. Résumé
Cet article présente comment utiliser Workerman pour développer une application d'appel vocal en temps réel basée sur le protocole UDP et fournit des exemples de code spécifiques. Grâce à cet article, nous avons découvert les avantages du protocole UDP et les étapes de mise en œuvre basées sur le protocole UDP. Je pense que cela sera utile aux développeurs qui développent des applications d'appel vocal en temps réel. Si vous avez une meilleure mise en œuvre ou d'autres questions, veuillez laisser un message dans la zone de commentaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!