Rechercher une fonction PHP

EventBufferEvent::connect

(PECL event >= 1.2.6-beta)

EventBufferEvent::connectConnecte le descripteur de fichier du tampon d'événement à l'adresse fournie, ou au socket UNIX

Description

public EventBufferEvent::connect ( string $addr ) : bool

Connecte le descripteur de fichier du tampon d'événement à l'adresse fournie (optionnellement, en fournissant le port), ou au socket UNIX.

Si le socket n'est pas assigné au tampon d'événements, cette méthode alloue un nouveau socket et le rend non bloquant en interne.

Pour résoudre les noms DNS (de façon asynchrone), utilisez la méthode EventBufferEvent::connectHost().

Retour à la première page de Manuel PHP  Table des matières Haut

Liste de paramètres

addr

Doit contenir une adresse IP avec, optionnellement, le numéro du port, ou un chemin vers le socket UNIX. Les formats reconnus sont :

[IPv6Address]:port
[IPv6Address]
IPv6Address
IPv4Address:port
IPv4Address
unix:path
Notez que le préfixe 'unix:' n'est actuellement pas sensible à la casse.

Retour à la première page de Manuel PHP  Table des matières Haut

Valeurs de retour

Retourne TRUE en cas de succès, FALSE sinon.

Retour à la première page de Manuel PHP  Table des matières Haut

Exemples

Exemple #1 Exemple avec EventBufferEvent::connect()

<?php
/*
 * 1. Connexion à l'adresse 127.0.0.1 sur le port 80
 * en appelant la méthode EventBufferEvent::connect().
 *
 * 2. Demande /index.cphp via HTTP/1.0
 * en utilisant le tampon de sortie.
 *
 * 3. Lit la réponse de façon asynchrone, et l'affiche dans stdout.
 */

/* Fonction de rappel de lecture */
function readcb($bev$base) {
    
$input $bev->getInput();

    while ((
$n $input->remove($buf1024)) > 0) {
        echo 
$buf;
    }
}

/* Fonction de rappel d'événement */
function eventcb($bev$events$base) {
    if (
$events EventBufferEvent::CONNECTED) {
        echo 
"Connecté.\n";
    } elseif (
$events & (EventBufferEvent::ERROR EventBufferEvent::EOF)) {
        if (
$events EventBufferEvent::ERROR) {
            echo 
"Erreur DNS : "$bev->getDnsErrorString(), PHP_EOL;
        }

        echo 
"Fermeture\n";
        
$base->exit();
        exit(
"Fait !\n");
    }
}

$base = new EventBase();

echo 
"étape 1\n";
$bev = new EventBufferEvent($base/* use internal socket */ NULL,
    
EventBufferEvent::OPT_CLOSE_ON_FREE EventBufferEvent::OPT_DEFER_CALLBACKS);
if (!
$bev) {
    exit(
"Echec lors de la création du socket bufferevent\n");
}

echo 
"étape 2\n";
$bev->setCallbacks("readcb"/* writecb */ NULL"eventcb"$base);
$bev->enable(Event::READ Event::WRITE);

echo 
"étape 3\n";
/* Envoi la demande */
$output $bev->getOutput();
if (!
$output->add(
    
"GET /index.cphp HTTP/1.0\r\n".
    
"Connection: Close\r\n\r\n"
)) {
    exit(
"Echec lors de l'ajout de la demande dans le tampon de sortie\n");
}

/* Connection à l'hôte de façon asynchrone.
 * Nous connaissons l'IP, et donc, nous n'avons pas besoin de résolution DNS. */
if (!$bev->connect("127.0.0.1:80")) {
    exit(
"Impossible de se connecter à l'hôte\n");
}

/* Distribue les événements en attente */
$base->dispatch();

L'exemple ci-dessus va afficher quelque chose de similaire à :

étape 1
étape 2
étape 3
Connecté.
HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Sat, 09 Mar 2013 10:06:58 GMT
Content-Type: text/html; charset=utf-8
Connection: close
X-Powered-By: PHP/5.4.11--pl2-gentoo

sdfsdfsf
Fermeture
Fait !

Exemple #2 Connexion à un socket UNIX, lecture de la réponse depuis le serveur, et affichage dans une console

<?php
class MyUnixSocketClient {
    private 
$base$bev;

    function 
__construct($base$sock_path) {
        
$this->base $base;
        
$this->bev = new EventBufferEvent($baseNULLEventBufferEvent::OPT_CLOSE_ON_FREE,
            array (
$this"read_cb"), NULL, array ($this"event_cb"));

        if (!
$this->bev->connect("unix:$sock_path")) {
            
trigger_error("Echec lors de la connexion au socket `$sock_path'"E_USER_ERROR);
        }

        
$this->bev->enable(Event::READ);
    }

    function 
__destruct() {
        if (
$this->bev) {
            
$this->bev->free();
            
$this->bev NULL;
        }
    }

    function 
dispatch() {
        
$this->base->dispatch();
    }

    function 
read_cb($bev$unused) {
        
$in $bev->input;

        
printf("Réception de %ld octets\n"$in->length);
        
printf("----- données ----\n");
        
printf("%ld:\t%s\n", (int) $in->length$in->pullup(-1));

        
$this->bev->free();
        
$this->bev NULL;
        
$this->base->exit(NULL);
    }

    function 
event_cb($bev$events$unused) {
        if (
$events EventBufferEvent::ERROR) {
            echo 
"Erreur depuis bufferevent\n";
        }

        if (
$events & (EventBufferEvent::EOF EventBufferEvent::ERROR)) {
            
$bev->free();
            
$bev NULL;
        } elseif (
$events EventBufferEvent::CONNECTED) {
            
$bev->output->add("test\n");
        }
    }
}

if (
$argc <= 1) {
    exit(
"Le chemin vers le socket n'est pas fourni\n");
}
$sock_path $argv[1];

$base = new EventBase();
$cl = new MyUnixSocketClient($base$sock_path);
$cl->dispatch();
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

Réception de 5 octets
----- données ----
5:  test
Rechercher une fonction PHP

Version en cache

25/11/2024 07:08:05 Cette version de la page est en cache (à la date du 25/11/2024 07:08:05) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.

Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-eventbufferevent.connect.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :fr Manuel PHP : http://php.net

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut