EventHttpConnection::setCloseCallback

(PECL event >= 1.8.0)

EventHttpConnection::setCloseCallbackSet callback for connection close

Beschreibung

public EventHttpConnection::setCloseCallback( callable $callback , mixed $data = ?): void

Sets callback for connection close.

Parameter-Liste

callback

Callback which is called when connection is closed. Should match the following prototype:

callback( EventHttpConnection $conn = null , mixed $arg = null ): void

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 EventHttpConnection::setCloseCallback() example

<?php
/*
 * Setting up close-connection callback
 *
 * The script handles closed connections using HTTP API.
 *
 * Usage:
 * 1) Launch the server:
 * $ php examples/http_closecb.php 4242
 *
 * 2) Launch a client in another terminal. Telnet-like
 * session should look like the following:
 *
 * $ nc -t 127.0.0.1 4242
 * GET / HTTP/1.0
 * Connection: close
 *
 * The server will output something similar to the following:
 *
 * HTTP/1.0 200 OK
 * Content-Type: multipart/x-mixed-replace;boundary=boundarydonotcross
 * Connection: close
 *
 * <html>
 *
 * 3) Terminate the client connection abruptly,
 * i.e. kill the process, or just press Ctrl-C.
 *
 * 4) Check if the server called _close_callback.
 * The script should output "_close_callback" string to standard output.
 *
 * 5) Check if the server's process has no orphaned connections,
 * e.g. with `lsof` utility.
 */

function _close_callback($conn)
{
    echo 
__FUNCTION__PHP_EOL;
}

function 
_http_default($req$dummy)
{
    
$conn $req->getConnection();
    
$conn->setCloseCallback('_close_callback'NULL);

    
/*
    By enabling Event::READ we protect the server against unclosed conections.
    This is a peculiarity of Libevent. The library disables Event::READ events
     on this connection, and the server is not notified about terminated
    connections.

    So each time client terminates connection abruptly, we get an orphaned
    connection. For instance, the following is a part of `lsof -p $PID | grep TCP`
    command after client has terminated connection:

    57-php     15057 ruslan  6u  unix 0xffff8802fb59c780   0t0  125187 socket
    58:php     15057 ruslan  7u  IPv4             125189   0t0     TCP *:4242 (LISTEN)
    59:php     15057 ruslan  8u  IPv4             124342   0t0     TCP localhost:4242->localhost:37375 (CLOSE_WAIT)

    where $PID is our process ID.

    The following block of code fixes such kind of orphaned connections.
     */
    
$bev $req->getBufferEvent();
    
$bev->enable(Event::READ);
    
// We have to free it explicitly. See
EventHttpRequest::getConnection()
$bev->free(); // we have to free it explicitly

    $req->addHeader(
        'Content-Type',
        'multipart/x-mixed-replace;boundary=boundarydonotcross',
        EventHttpRequest::OUTPUT_HEADER
    );

    $buf = new EventBuffer();
    $buf->add('<html>');

    $req->sendReply(200, "OK");
    $req->sendReplyChunk($buf);
}

$port = 4242;
if ($argc > 1) {
    $port = (int) $argv[1];
}
if ($port <= 0 || $port > 65535) {
    exit("Invalid port");
}

$base = new EventBase();
$http = new EventHttp($base);

$http->setDefaultCallback("_http_default", NULL);
$http->bind("0.0.0.0", $port);
$base->loop();

?>

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Was genau bedeutet "Vibe Coding"? Ein tiefgehender Blick für Entwickler

In der Welt der Softwareentwicklung gibt es unzählige Wege, wie man an ein Projekt herangeht. Manche schwören auf strikte Planung, andere auf bewährte Algorithmen und wieder andere lassen sich von etwas ganz anderem leiten: ihrem Gefühl. ...

admin

Autor : admin
Kategorie: Software & Web-Development

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

json Rückgabe von Open Weather darstellen

Es ist wie du gesagt hast, sobald man es richtig lesen kann, ist das Auslesen super einfach. Danke für den Tipp. Die Lösung, sollte sie nochmal ...

Geschrieben von Chaos_Lord am 22.10.2025 19:07:27
Forum: PHP Developer Forum
Fatal Error bei übergabe an Datenbank 1 Formular funktioniert das andere nicht

Achte auf meine Hinweise, die ich nachträglich geschrieben habe.

Geschrieben von scatello am 16.10.2025 20:02:05
Forum: PHP Developer Forum
Fatal Error bei übergabe an Datenbank 1 Formular funktioniert das andere nicht

konnte es mittlerweile lösen. habe zeile für zeile nochmal auseinander genommen nur um dann festzustellen das die Meldung vorher von einer ander ...

Geschrieben von phppower am 16.10.2025 20:01:14
Forum: PHP Developer Forum
Fatal Error bei übergabe an Datenbank 1 Formular funktioniert das andere nicht

PHP schreibt ja nicht nur "Fatal Error", warum postest du nicht die komplette Fehlermeldung? Und drehe während der Entwicklung von Scripten das P ...

Geschrieben von scatello am 16.10.2025 19:50:42
Forum: PHP Developer Forum