public function listen($options = array(), $listeningListener = '') { $default_options = array('port' => 1337, 'host' => '127.0.0.1', 'backlog' => 100); $options = array_merge($default_options, $options); $this->setPort($options['port']); $this->setHost($options['host']); $this->setBacklog($options['backlog']); $this->setListeningListener($listeningListener); $this->server = uv_tcp_init(); //very tricky, must use $this->server, using local variable will lead to segmentation fault uv_tcp_bind($this->server, uv_ip4_addr($options['host'], $options['port'])); $self = $this; uv_listen($this->server, $options['backlog'], function ($server) use($self) { $client = uv_tcp_init(); uv_accept($server, $client); $socket = new \Phastlight\Module\NET\Socket(); uv_read_start($client, function ($uvSocket, $nread, $buffer) use($self, $socket) { if ($nread > 0) { $socket->setSocket($uvSocket); call_user_func_array($self->getConnectionListener(), array($socket)); $socket->emit('data', $buffer); } }); }); }
public function listen($port, $host = '127.0.0.1', $backlog = 100) { $this->port = $port; $this->host = $host; $self = $this; $system = $this->getSystem(); $this->server = uv_tcp_init(); $request = $self->getServerRequest(); $response = $self->getServerResponse(); $requestListener = $self->getRequestListener(); uv_tcp_bind($this->server, uv_ip4_addr($host, $port)); uv_listen($this->server, $backlog, function ($server) use($self, &$request, &$response, &$requestListener) { $client = uv_tcp_init(); uv_accept($server, $client); uv_read_start($client, function ($socket, $nread, $buffer) use($self, &$request, &$response, &$requestListener) { $self->generateServerVariables($buffer, $socket); call_user_func_array($requestListener, array($request, $response)); $status_code = $response->getStatusCode(); $statusMessage = $response->getReasonPhrase(); $headers = $response->getHeaders(); $header = ""; if (count($headers) > 0) { foreach ($headers as $key => $val) { $header .= $key . ": " . $val . "\r\n"; } } $output = $response->getData(); $buffer = "HTTP/1.1 {$status_code} {$statusMessage}\r\n{$header}\r\n{$output}"; uv_write($socket, $buffer); uv_close($socket); }); }); }
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; }
/** * Class constructor. * * @param ServiceManagerInterface $serviceManager * @param LoopInterface $loop * @param SocketInterface $socket * @param callable $callback */ public function __construct(ServiceManagerInterface $serviceManager, LoopInterface $loop, SocketInterface $socket = null, callable $callback = null) { $this->setLoop($loop); $this->connection = \uv_tcp_init($this->loop->getBackend()); if ($socket !== null) { $this->connect($socket, $callback); } }
public function onConnect($server, $status) { $client = uv_tcp_init(); uv_tcp_nodelay($client, 1); uv_accept($server, $client); $this->clients[(int) $client] = $client; $this->parsers[(int) $client] = uv_http_parser_init(); uv_read_start($client, array($this, "onRead")); }
/** * @param ServiceManagerInterface $serviceManager * @param LibuvLoopInterface $loop * @param SocketInterface $socket */ public function __construct(ServiceManagerInterface $serviceManager, LibuvLoopInterface $loop, SocketInterface $socket = null) { $this->setLoop($loop); $this->connection = \uv_tcp_init($this->getLoop()->getBackend()); if ($socket !== null) { $this->registerSocket($socket); } $this->setServiceManager($serviceManager); }
<?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();
# # # # # # # # # # # # # # # ###### # # # # ##### ##### ##### ##### # # ##### ##### # # # # ##### # # # # # # # # # # # # # # # # # # ## # # # # ## # # # # # ##### ##### # # # ##### # # http server started on port {$port} EOF; echo $banner; $server = uv_tcp_init(); uv_tcp_bind6($server, uv_ip6_addr($address, $port)); $clients = array(); $parsers = array(); uv_listen($server, 511, function ($server_stream) use(&$parsers, &$clients) { $client = uv_tcp_init(); uv_accept($server_stream, $client); $clients[(int) $client] = $client; $parsers[(int) $client] = uv_http_parser_init(); uv_read_start($client, function ($client, $nread, $buffer) use(&$parsers, &$clients) { if ($nread < 0) { uv_shutdown($client, function ($client) use(&$parsers, &$clients) { uv_close($client, function ($client) use(&$parsers, &$clients) { unset($parsers[(int) $client]); unset($clients[(int) $client]); }); }); return; } else { if ($nread == 0) { if (uv_last_error() == UV::EOF) {
<?php $url = "http://yahoo.co.jp/"; $parts = parse_url($url); $domain = $parts['host']; $path = $parts['path'] . '?' . $parts['query']; $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;