コード例 #1
0
ファイル: Socket.php プロジェクト: phastlight/phastlight
 public function connect($port, $host, $connectionListener)
 {
     $self = $this;
     $this->connection = uv_tcp_init();
     $client = $this->connection;
     uv_tcp_connect($this->connection, uv_ip4_addr($host, $port), function ($stream, $stat) use($self, $connectionListener, &$client) {
         $self->setType("tcp4");
         if ($stat == 0) {
             $self->emit("connect");
             if (is_callable($connectionListener)) {
                 $connectionListener();
             }
             //start reading data from server...
             uv_read_start($client, function ($stream, $nread, $buffer) use($self) {
                 if ($nread > 0) {
                     //we got some data from server
                     $self->emit('data', $buffer);
                 }
                 if ($self->shouldClose) {
                     uv_close($stream);
                     $self->emit('close');
                 }
             });
         }
     });
     return $this;
 }
コード例 #2
0
 /**
  * Connects a client to the socket
  *
  * @param ClientInterface $client
  * @param callable $callback
  * @return SocketInterface
  */
 public function connect(ClientInterface $client, callable $callback)
 {
     $internalCallback = function ($resource, $status) use($callback, $client) {
         if (!$status) {
             $client->emit(new Event('error'), [$resource, new ConnectionError('Could not open connection.', $status)]);
             return;
         }
         $client->on(['data'], $callback);
     };
     \uv_tcp_connect($client->getBackend(), $this->getBackend(), $internalCallback);
     return $this;
 }
コード例 #3
0
ファイル: tcp_bind.php プロジェクト: zhanglei/php-uv
<?php

$tcp = uv_tcp_init();
uv_tcp_bind($tcp, uv_ip4_addr('0.0.0.0', 9999));
uv_listen($tcp, 100, function ($server) {
    $client = uv_tcp_init();
    uv_accept($server, $client);
    var_dump(uv_tcp_getsockname($server));
    uv_read_start($client, function ($socket, $nread, $buffer) use($server) {
        var_dump($buffer);
        uv_close($socket);
        uv_close($server);
    });
});
$c = uv_tcp_init();
uv_tcp_connect($c, uv_ip4_addr('0.0.0.0', 9999), function ($client, $stat) {
    if ($stat == 0) {
        uv_write($client, "Hello", function ($socket, $stat) {
            uv_close($socket);
        });
    }
});
uv_run();
コード例 #4
0
ファイル: request.php プロジェクト: zhanglei/php-uv
$uv = uv_ares_init_options(uv_default_loop(), array("servers" => array("8.8.8.8"), "port" => 53), null);
ares_gethostbyname($uv, $domain, AF_INET, function ($name, $addr) use($path, $host) {
    $a = array_shift($addr);
    $address = uv_ip4_addr($a, "80");
    $tcp = uv_tcp_init();
    uv_tcp_connect($tcp, $address, function ($client, $stat) use($path, $host) {
        var_dump(uv_tcp_getpeername($client));
        $request = <<<EOF
GET {$path} HTTP/1.0
Host: {$host}


EOF;
        echo $request;
        var_dump($client);
        uv_write($client, $request, function ($client, $stat) {
            echo "write";
            if ($stat == 0) {
                uv_read_start($client, function ($client, $nread, $buffer) {
                    echo "\n1\n";
                    //var_dump($buffer);
                    uv_close($client);
                });
            } else {
                echo 2;
                uv_close($client);
            }
        });
    });
});
uv_run();