示例#1
0
 /**
  * @covers React\Socket\Connection::getRemoteAddress
  */
 public function testGetRemoteAddress()
 {
     $loop = new StreamSelectLoop();
     $server = new Server($loop);
     $server->listen(0);
     $class = new \ReflectionClass('React\\Socket\\Server');
     $master = $class->getProperty('master');
     $master->setAccessible(true);
     $client = stream_socket_client('tcp://localhost:' . $server->getPort());
     $class = new \ReflectionClass('React\\Socket\\Connection');
     $method = $class->getMethod('parseAddress');
     $method->setAccessible(true);
     $servConn = new Connection($server->master, $loop);
     $mock = $this->expectCallableOnceWith($method->invokeArgs($servConn, array(stream_socket_get_name($master->getValue($server), false))));
     $server->on('connection', function ($conn) use($mock) {
         $mock($conn->getRemoteAddress());
     });
     $loop->tick();
 }
示例#2
0
// sent for each connection and will print the average throughput once the
// connection closes.
//
// $ php examples/03-benchmark.php 8000
// $ telnet localhost 8000
// $ echo hello world | nc -v localhost 8000
// $ dd if=/dev/zero bs=1M count=1000 | nc -v localhost 8000
use React\EventLoop\Factory;
use React\Socket\Server;
use React\Socket\ConnectionInterface;
require __DIR__ . '/../vendor/autoload.php';
$loop = Factory::create();
$server = new Server($loop);
$server->listen(isset($argv[1]) ? $argv[1] : 0);
$server->on('connection', function (ConnectionInterface $conn) use($loop) {
    echo '[connected]' . PHP_EOL;
    // count the number of bytes received from this connection
    $bytes = 0;
    $conn->on('data', function ($chunk) use(&$bytes) {
        $bytes += strlen($chunk);
    });
    // report average throughput once client disconnects
    $t = microtime(true);
    $conn->on('close', function () use($conn, $t, &$bytes) {
        $t = microtime(true) - $t;
        echo '[disconnected after receiving ' . $bytes . ' bytes in ' . round($t, 3) . 's => ' . round($bytes / $t / 1024 / 1024, 1) . ' MiB/s]' . PHP_EOL;
    });
});
$server->on('error', 'printf');
echo 'bound to ' . $server->getPort() . PHP_EOL;
$loop->run();
示例#3
0
use React\EventLoop\Factory;
use React\Socket\Server;
use React\Socket\ConnectionInterface;
require __DIR__ . '/../vendor/autoload.php';
$loop = Factory::create();
$server = new Server($loop);
$server->listen(isset($argv[1]) ? $argv[1] : 0, '0.0.0.0');
$clients = array();
$server->on('connection', function (ConnectionInterface $client) use(&$clients) {
    // keep a list of all connected clients
    $clients[] = $client;
    $client->on('close', function () use($client, &$clients) {
        unset($clients[array_search($client, $clients)]);
    });
    // whenever a new message comes in
    $client->on('data', function ($data) use($client, &$clients) {
        // remove any non-word characters (just for the demo)
        $data = trim(preg_replace('/[^\\w\\d \\.\\,\\-\\!\\?]/u', '', $data));
        // ignore empty messages
        if ($data === '') {
            return;
        }
        // prefix with client IP and broadcast to all connected clients
        $data = $client->getRemoteAddress() . ': ' . $data . PHP_EOL;
        foreach ($clients as $client) {
            $client->write($data);
        }
    });
});
echo 'Listening on ' . $server->getPort() . PHP_EOL;
$loop->run();
示例#4
0
<?php

use React\EventLoop\Factory;
use React\Socket\Server;
use React\Http\Request;
use React\Http\Response;
require __DIR__ . '/../vendor/autoload.php';
$loop = Factory::create();
$socket = new Server($loop);
$server = new \React\Http\Server($socket);
$server->on('request', function (Request $request, Response $response) {
    $response->writeHead(200, array('Content-Type' => 'text/plain'));
    $response->end("Hello world!\n");
});
$socket->listen(isset($argv[1]) ? $argv[1] : 0, '0.0.0.0');
echo 'Listening on ' . $socket->getPort() . PHP_EOL;
$loop->run();