Heim > php教程 > PHP开发 > Hauptteil

Detaillierte Erläuterung der Beispiele für Socket-Kommunikationsmechanismen in PHP

高洛峰
Freigeben: 2016-12-22 09:51:15
Original
1096 Leute haben es durchsucht

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, &#39;127.0.0.1&#39;, 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 ");  
}  
?>
Nach dem Login kopieren

3. socket client client.php

<?php  
// 建立客户端的socet连接  
$socket = socket_create(af_inet, sock_stream, sol_tcp);  
$connection = socket_connect($socket, &#39;127.0.0.1&#39;, 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 . " ";  
        } 
 
    }  
} 
?>
Nach dem Login kopieren

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
Nach dem Login kopieren

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 ~]$
Nach dem Login kopieren

b Senden Sie die Informationen an den Cache

$buffer = "connect";
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage