Aktueller Standort: Startseite> Neueste Artikel> Wie benutze ich die Funktion Socket_Listen in PHP? Detaillierte Erläuterung der richtigen Haltung zum Einschalten der Überwachung

Wie benutze ich die Funktion Socket_Listen in PHP? Detaillierte Erläuterung der richtigen Haltung zum Einschalten der Überwachung

gitbox 2025-06-25

In PHP wird die Funktion mit Socket_Listen verwendet, um einen erstellten Socket anzuhören, sodass der Socket eingehende Verbindungsanforderungen empfangen kann. Normalerweise wird diese Funktion mit Socket_Create und Socket_Bind verwendet, um einen vollständigen Server -Socket zu erstellen, um Client -Anforderungen zu verarbeiten. Dieser Artikel analysiert die Verwendung der Funktion Socket_Listen detailliert und leitet Sie zum richtigen Zuhören ein.

1. Grundnutzung von Socket_Listenfunktion

Funktionsprototyp:

 <span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">socket_listen</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$backlog</span></span><span> = </span><span><span class="hljs-number">0</span></span><span> )
</span></span>
  • $ Socket : Die Socket -Ressource, die über Socket_Create erstellt und über Socket_Bind an die Adresse und den Port gebunden wurde.

  • $ Backlog : Gibt die maximale Anzahl ausstehender Verbindungsanforderungen an. Es definiert die Warteschlangenlängen unverarbeiteter Verbindungen, die vom Kernel des Betriebssystems zulässig sind. Wenn die Warteschlange voll ist, wird eine neue Verbindungsanforderung abgelehnt. Der gemeinsame Wert beträgt 128 , kann jedoch entsprechend den Anforderungen angepasst werden.

Rückgabewert:

  • Wenn er erfolgreich ist, kehren Sie 0 zurück.

  • Bei einem Fehler wird FALSE zurückgegeben und Fehlerinformationen können über Socket_Last_error () erhalten werden.

2. Verwenden Sie die Funktion Socket_Listen

Um Socket_Listen zu verwenden, müssen Sie normalerweise eine Socket über Socket_Create erstellen und an die angegebene IP -Adresse und den Port mit Socket_Bind binden. Als nächstes können Sie Socket_Listen verwenden, um diesen Socket zu starten, nach Verbindungsanforderungen vom Client zu hören. Hier ist ein grundlegendes Serverbeispiel:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// erstellenTCPSteckdosen</span></span><span>
</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$socket</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法erstellenSteckdosen: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>();
}

</span><span><span class="hljs-comment">// An die angegebenen bindenIPAdresse und Port</span></span><span>
</span><span><span class="hljs-variable">$address</span></span><span> = </span><span><span class="hljs-string">'127.0.0.1'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bindung fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>();
}

</span><span><span class="hljs-comment">// 开始监听Steckdosen</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_listen</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Zuhören fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>();
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Der Server hört zu <span class="hljs-subst">$address</span></span></span><span>:</span><span><span class="hljs-subst">$port</span></span><span>...\n";

</span><span><span class="hljs-comment">// Verbindung erhalten</span></span><span>
</span><span><span class="hljs-variable">$clientSocket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_accept</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$clientSocket</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Verbindung erhalten失败: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>();
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Der Client ist verbunden\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$clientSocket</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

In diesem Beispiel:

  1. Erstellen Sie einen TCP -Socket über Socket_Create .

  2. Verwenden Sie Socket_Bind , um den Socket an 127.0.0.1:8080 zu binden, d. H. Port 8080 der lokalen Adresse.

  3. Rufen Sie Socket_Listen auf, um die Verbindungsanforderung anzuhören, und der zweite Parameter 5 zeigt die maximale Anzahl der zulässigen unverarbeiteten Verbindungen an.

  4. Verwenden Sie Socket_accept, um eine Verbindung vom Client zu akzeptieren.

3. Parameteranalyse: Rückstandparameter

Der zweite Parameter -Rückstand von Socket_Listen gibt die Länge der Verbindungswarteschlange im Kernel an. Diese Warteschlange speichert Verbindungen, die von Socket_accept nicht akzeptiert wurden. Es ist zu beachten, dass dieser Parameter nicht so groß wie möglich ist. Während höhere Werte so eingestellt werden können, dass sie waitende Verbindungen berücksichtigen, kann dies auch mehr Systemressourcen aufnehmen und zu Verschwendung von Ressourcen führen, wenn die Einstellungen zu groß sind, um keine Verarbeitungsleistung zu erhalten.

Häufige Backlog -Werte:

  • 128 : Dies ist ein häufiger Standardwert und eignet sich für die meisten Anwendungsszenarien.

  • 0 : Wenn auf 0 eingestellt ist, verwendet das System die Standard -Warteschlangenlänge. Im Allgemeinen besteht keine Notwendigkeit, sich um den Wert von 0 zu sorgen.

4. Fehlerbehandlung und -Debuggen

Bei der Programmierung eines Netzwerks sind Fehler unvermeidlich. Socket_Listen gibt falsch zurück, wenn es fehlschlägt. Sie können Socket_Last_error verwenden, um detaillierte Fehlerinformationen für das einfache Debuggen zu erhalten. Zum Beispiel:

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$errorCode</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Zuhören fehlgeschlagen, Fehlercode: <span class="hljs-subst">$errorCode</span></span></span><span>, Fehlermeldung: " . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-variable">$errorCode</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

Dieser Code gibt detailliertere Fehlerinformationen zurück, um Probleme zu beheben.

5. Dinge zu beachten

  • Nicht-Blocking-Modus : Wenn der Socket das Programm während des Hörens nicht blockiert, können Sie mit der Funktion Socket_Set_NonBlock den Socket auf den Nicht-Blocking-Modus einstellen.

  • Multithread/Multi-Process : Wenn Sie sich mit einer großen Anzahl von gleichzeitigen Verbindungen befassen, sollten Sie in Betracht ziehen, ein Mehrprozess- oder Multi-Thread-Modell (z.

  • Reinigung : Vergessen Sie nach der Verwendung des Sockets nicht, Socket_Close aufzurufen, um den Socket zu schließen und die Ressourcen freizugeben.

6. Zusammenfassung

Socket_Listen ist eine sehr wichtige Funktion bei der PHP -Socket -Programmierung. Es ist dafür verantwortlich, den gebundenen Socket so einzustellen, dass sich der Client verbindet. Durch die korrekte Verwendung von Socket_Listen können Ihre PHP -Anwendung Verbindungsanforderungen vom Client verarbeiten und stabile Netzwerkdienste bereitstellen. Stellen Sie sicher, dass die Rückstandsparameter korrekt eingestellt sind und Fehler ordnungsgemäß behandelt werden, was die Zuverlässigkeit und Stabilität der Anwendung effektiv verbessern kann.