Die Beispiele in diesem Artikel beschreiben den Socket-Kommunikationsmechanismus und die Verwendung in PHP. Teilen Sie es als Referenz mit allen. Die konkrete Analyse lautet wie folgt:
1. Was ist ein Socket?
Was ist ein Socket, der üblicherweise auch als „Socket“ bezeichnet wird? IP-Adresse und Port. Dies ist das Handle einer Kommunikationskette. Anwendungen stellen normalerweise Anfragen an das Netzwerk oder antworten auf Netzwerkanfragen über „Sockets“. Um es ganz klar auszudrücken: Es handelt sich um einen Kommunikationsmechanismus. Es ähnelt den telefonischen Kundendienstabteilungen von Banken, Telekommunikationsabteilungen und anderen Abteilungen. Wenn Sie anrufen, wird Ihnen eine Person zugewiesen, die Ihre Fragen beantwortet. Die Kundendienstabteilung entspricht der Serverseite des Sockets, und Ihre Seite entspricht dem Client. Bevor der Anruf bei Ihnen endet Es ist unmöglich, mit Ihrem Gesprächspartner zu sprechen, da Sie mit ihm kommunizieren. Die Telefonzentrale des Kundendienstes wird natürlich nicht dupliziert.
Im Folgenden werde ich ein Beispiel geben, um zu erklären, wie Socket funktioniert. Wenn Sie auf der Anwendungsebene entwickeln, müssen Sie das Prinzip nicht unbedingt verstehen, aber es ist besser, es zu kennen. Es gibt PHP-APIs über Sockets im Internet. Legen Sie es einfach hin und verwenden Sie es.
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 (In Betracht gezogen, den Socket am Ende der Zeit automatisch zu schließen)
Eine kurze Erklärung, warum Sie den PHP-Befehl verwenden müssen, um den Server und den Client auszuführen. Sie verwenden fsockopen, damit Sie durchsuchen können. Wenn auf dem Server darauf zugegriffen wird, kommt es zumindest zu einer Zeitüberschreitung der Verbindung. Warum ist das so? Denn wenn Sie einen Socket erstellen, wird ständig überwacht, ob der Client eine Verbindung herstellen möchte.
Für die Einrichtung der Socket-Kommunikation sind zwei Socket-Kanäle erforderlich, einer vom Server und einer vom Client.
Zeile 1: Der Server erstellt einen Socket-Kanal, legt die Informationen im Cache ab und wartet darauf, dass der Client eine Verbindung herstellt.
Zeile 2: Der Client erstellt einen Socket-Kanal und stellt eine Verbindung zum Server her erhalten Der Server kommuniziert mit den Informationen und sendet die Informationen an Kanal
Zeile 3. Der Server erhält die Informationen vom Client und teilt dem Client mit, dass ich die Informationen erhalten habe. Senden Sie die zu übertragenden Informationen in den Kanal
Zeile 4, und der Client erhält die Bestätigungsinformationen vom Server
Zu diesem Zeitpunkt ist die Kommunikation vollständig hergestellt, nachdem die Datenübertragung abgeschlossen ist , der Server wird getrennt Socket-Kommunikation, der spezifische Vorgang ist wie folgt.
1 Führen Sie den Socket-Server aus
[root@blackghost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php interactive mode enabled
Welche Art von Arbeit wurde zu diesem Zeitpunkt durchgeführt
a Hören Sie einen 10008-Port ab
[zhangy@blackghost ~]$ netstat -an |grep listen |grep 10008 tcp 0 0 127.0.0.1:10008 0.0.0.0:* listen [zhangy@blackghost ~]$
b Senden Sie die Informationen an den Cache
$buffer = "connect";
Sehen Sie sich den obigen Code an
2 Führen Sie den Socket-Client aus
[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 Zurück zum Server
[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
Ich hoffe, dieser Artikel wird für alle bei der PHP-Programmierung hilfreich sein.
Ausführlichere Erläuterungen zu Beispielen für Socket-Kommunikationsmechanismen in PHP und verwandte Artikel finden Sie auf der chinesischen PHP-Website!