Les exemples de cet article décrivent le mécanisme de communication des sockets et leur utilisation en php. Partagez-le avec tout le monde pour votre référence. L'analyse spécifique est la suivante :
1. Qu'est-ce qu'une socket ?
Qu'est-ce qu'une socket ? Adresse IP et port. C'est le handle d'une chaîne de communication. Les applications envoient généralement des requêtes au réseau ou répondent aux requêtes du réseau via des « sockets ». Pour parler franchement, il s’agit d’un mécanisme de communication. Il est similaire aux services de service client téléphonique des banques, des télécommunications et d'autres services. Lorsque vous appelez, une personne sera désignée pour répondre à vos questions. Le service client est équivalent au côté serveur du socket, et votre côté est équivalent au client avant la fin de l'appel avec vous, si quelqu'un est dessus. impossible de parler à votre interlocuteur car vous communiquez avec lui. Bien entendu, le standard téléphonique du service client ne sera pas dupliqué.
Ci-dessous, je vais donner un exemple pour expliquer le fonctionnement du socket. Si vous développez à partir de la couche applicative, vous n’avez pas forcément besoin d’en comprendre le principe, mais il vaut mieux le savoir. Il existe des API PHP sur les sockets sur Internet. Posez-le et utilisez-le.
2. socket server server.php
<?php // 建立server端socket $tcp = getprotobyname("tcp"); $socket = socket_create(af_inet, sock_stream, $tcp); socket_bind($socket, '127.0.0.1', 10008); //绑定要监听的端口 socket_listen($socket); //监听端口 //初始化一个数据,和客户端通信 $buffer = "connect"; while (true) { // 接受一个socket连接 $connection = socket_accept($socket); if(!$connection){ echo "connect fail"; }else{ echo "socket connected "; // 向客户端传递一个信息数据 if ($buffer != "") { echo "send data to client "; socket_write($connection, $buffer . " "); echo "wrote to socket "; } else { echo "no data in the buffer " ; } // 从客户端取得信息 while ($data = @socket_read($connection, 1024, php_normal_read)) { printf("buffer: " . $data . " "); //取得信息给客户端一个反馈 socket_write($connection, "information received "); } } socket_close($connection); //关闭 socket printf("closed the socket "); } ?>
3. socket client client.php
<?php // 建立客户端的socet连接 $socket = socket_create(af_inet, sock_stream, sol_tcp); $connection = socket_connect($socket, '127.0.0.1', 10008); //连接服务器端socket while ($buffer = @socket_read($socket, 1024, php_normal_read)) { //服务端告诉客户端,自己的状态 if (preg_match("/not connect/",$buffer)) { echo "don`t connect "; break; } else { //服务器传来信息 echo "buffer data: " . $buffer . " "; echo "writing to socket "; // 将客户的信息写到通道中,传给服务器端 if (!socket_write($socket, "some data ")) { echo "write failed "; } //服务器端收到信息后,给于的回应信息 while ($buffer = socket_read($socket, 1024, php_normal_read)) { echo "sent to server: some data response from server was:" . $buffer . " "; } } } ?>
4. considéré Fermer automatiquement le socket à la fin du temps)
Une brève explication. Avant d'expliquer, je veux dire pourquoi vous devez utiliser la commande php pour exécuter le serveur et le client. vous utilisez fsockopen, vous pouvez donc parcourir. En cas d'accès sur le serveur, la connexion expirera. Pourquoi ? Parce que lorsque vous créez un socket, il surveillera en permanence si le client souhaite se connecter.
L'établissement de la communication socket nécessite deux canaux socket, un créé par le serveur et un créé par le client.
Ligne 1, le serveur crée un canal socket, met les informations dans le cache et attend que le client se connecte
Ligne 2, le client crée un canal socket et se connecte au serveur pour obtenir Le serveur communique avec les informations et envoie les informations au canal
ligne 3. Le serveur obtient les informations du client et informe le client que j'ai reçu les informations. Envoyez les informations à transmettre dans le canal
ligne 4, et le client obtient les informations de confirmation du serveur
À ce stade, la communication est complètement établie une fois la transmission des données terminée. , le serveur sera déconnecté de la communication Socket, l'opération spécifique est la suivante.
1 Exécutez le serveur socket
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php interactive mode enabled
Quel type de travail a été effectué à ce stade
a Écouter un port 10008
[zhangy@blackghost ~]$ netstat -an |grep listen |grep 10008 tcp 0 0 127.0.0.1:10008 0.0.0.0:* listen [zhangy@blackghost ~]$
b Envoyer les informations au cache
$buffer = "connect";
Regardez le code ci-dessus
2 Exécutez le client socket
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/client.php interactive mode enabled buffer data: connect writing to socket sent to server: some data response from server was:information received
3 Retour au serveur
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php interactive mode enabled socket connected send data to client wrote to socket buffer: some data closed the socket
J'espère que cet article sera utile à la programmation PHP de chacun.
Pour des explications plus détaillées sur les exemples de mécanismes de communication de socket en PHP et les articles associés, veuillez faire attention au site Web PHP chinois !